/************************************************************************
*
* Copyright (c) 2014-2025 Barbara Geller & Ansel Sermersheim
* Copyright (c) 1997-2014 Dimitri van Heesch
*
* DoxyPress is free software. You can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
* DoxyPress is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* Documents produced by DoxyPress are derivative works derived from the
* input used in their production; they are not affected by this license.
*
* https://www.gnu.org/licenses/
*
*************************************************************************/

#define  YY_INT_ALIGNED short int

/* A lexical scanner generated by flex */

#define yy_create_buffer commentscanYY_create_buffer
#define yy_delete_buffer commentscanYY_delete_buffer
#define yy_scan_buffer commentscanYY_scan_buffer
#define yy_scan_string commentscanYY_scan_string
#define yy_scan_bytes commentscanYY_scan_bytes
#define yy_init_buffer commentscanYY_init_buffer
#define yy_flush_buffer commentscanYY_flush_buffer
#define yy_load_buffer_state commentscanYY_load_buffer_state
#define yy_switch_to_buffer commentscanYY_switch_to_buffer
#define yypush_buffer_state commentscanYYpush_buffer_state
#define yypop_buffer_state commentscanYYpop_buffer_state
#define yyensure_buffer_stack commentscanYYensure_buffer_stack
#define yy_flex_debug commentscanYY_flex_debug
#define yyin commentscanYYin
#define yyleng commentscanYYleng
#define yylex commentscanYYlex
#define yylineno commentscanYYlineno
#define yyout commentscanYYout
#define yyrestart commentscanYYrestart
#define yytext commentscanYYtext
#define yywrap commentscanYYwrap
#define yyalloc commentscanYYalloc
#define yyrealloc commentscanYYrealloc
#define yyfree commentscanYYfree

#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 6
#define YY_FLEX_SUBMINOR_VERSION 4
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif

#ifdef yy_create_buffer
#define commentscanYY_create_buffer_ALREADY_DEFINED
#else
#define yy_create_buffer commentscanYY_create_buffer
#endif

#ifdef yy_delete_buffer
#define commentscanYY_delete_buffer_ALREADY_DEFINED
#else
#define yy_delete_buffer commentscanYY_delete_buffer
#endif

#ifdef yy_scan_buffer
#define commentscanYY_scan_buffer_ALREADY_DEFINED
#else
#define yy_scan_buffer commentscanYY_scan_buffer
#endif

#ifdef yy_scan_string
#define commentscanYY_scan_string_ALREADY_DEFINED
#else
#define yy_scan_string commentscanYY_scan_string
#endif

#ifdef yy_scan_bytes
#define commentscanYY_scan_bytes_ALREADY_DEFINED
#else
#define yy_scan_bytes commentscanYY_scan_bytes
#endif

#ifdef yy_init_buffer
#define commentscanYY_init_buffer_ALREADY_DEFINED
#else
#define yy_init_buffer commentscanYY_init_buffer
#endif

#ifdef yy_flush_buffer
#define commentscanYY_flush_buffer_ALREADY_DEFINED
#else
#define yy_flush_buffer commentscanYY_flush_buffer
#endif

#ifdef yy_load_buffer_state
#define commentscanYY_load_buffer_state_ALREADY_DEFINED
#else
#define yy_load_buffer_state commentscanYY_load_buffer_state
#endif

#ifdef yy_switch_to_buffer
#define commentscanYY_switch_to_buffer_ALREADY_DEFINED
#else
#define yy_switch_to_buffer commentscanYY_switch_to_buffer
#endif

#ifdef yypush_buffer_state
#define commentscanYYpush_buffer_state_ALREADY_DEFINED
#else
#define yypush_buffer_state commentscanYYpush_buffer_state
#endif

#ifdef yypop_buffer_state
#define commentscanYYpop_buffer_state_ALREADY_DEFINED
#else
#define yypop_buffer_state commentscanYYpop_buffer_state
#endif

#ifdef yyensure_buffer_stack
#define commentscanYYensure_buffer_stack_ALREADY_DEFINED
#else
#define yyensure_buffer_stack commentscanYYensure_buffer_stack
#endif

#ifdef yylex
#define commentscanYYlex_ALREADY_DEFINED
#else
#define yylex commentscanYYlex
#endif

#ifdef yyrestart
#define commentscanYYrestart_ALREADY_DEFINED
#else
#define yyrestart commentscanYYrestart
#endif

#ifdef yylex_init
#define commentscanYYlex_init_ALREADY_DEFINED
#else
#define yylex_init commentscanYYlex_init
#endif

#ifdef yylex_init_extra
#define commentscanYYlex_init_extra_ALREADY_DEFINED
#else
#define yylex_init_extra commentscanYYlex_init_extra
#endif

#ifdef yylex_destroy
#define commentscanYYlex_destroy_ALREADY_DEFINED
#else
#define yylex_destroy commentscanYYlex_destroy
#endif

#ifdef yyget_debug
#define commentscanYYget_debug_ALREADY_DEFINED
#else
#define yyget_debug commentscanYYget_debug
#endif

#ifdef yyset_debug
#define commentscanYYset_debug_ALREADY_DEFINED
#else
#define yyset_debug commentscanYYset_debug
#endif

#ifdef yyget_extra
#define commentscanYYget_extra_ALREADY_DEFINED
#else
#define yyget_extra commentscanYYget_extra
#endif

#ifdef yyset_extra
#define commentscanYYset_extra_ALREADY_DEFINED
#else
#define yyset_extra commentscanYYset_extra
#endif

#ifdef yyget_in
#define commentscanYYget_in_ALREADY_DEFINED
#else
#define yyget_in commentscanYYget_in
#endif

#ifdef yyset_in
#define commentscanYYset_in_ALREADY_DEFINED
#else
#define yyset_in commentscanYYset_in
#endif

#ifdef yyget_out
#define commentscanYYget_out_ALREADY_DEFINED
#else
#define yyget_out commentscanYYget_out
#endif

#ifdef yyset_out
#define commentscanYYset_out_ALREADY_DEFINED
#else
#define yyset_out commentscanYYset_out
#endif

#ifdef yyget_leng
#define commentscanYYget_leng_ALREADY_DEFINED
#else
#define yyget_leng commentscanYYget_leng
#endif

#ifdef yyget_text
#define commentscanYYget_text_ALREADY_DEFINED
#else
#define yyget_text commentscanYYget_text
#endif

#ifdef yyget_lineno
#define commentscanYYget_lineno_ALREADY_DEFINED
#else
#define yyget_lineno commentscanYYget_lineno
#endif

#ifdef yyset_lineno
#define commentscanYYset_lineno_ALREADY_DEFINED
#else
#define yyset_lineno commentscanYYset_lineno
#endif

#ifdef yywrap
#define commentscanYYwrap_ALREADY_DEFINED
#else
#define yywrap commentscanYYwrap
#endif

#ifdef yyalloc
#define commentscanYYalloc_ALREADY_DEFINED
#else
#define yyalloc commentscanYYalloc
#endif

#ifdef yyrealloc
#define commentscanYYrealloc_ALREADY_DEFINED
#else
#define yyrealloc commentscanYYrealloc
#endif

#ifdef yyfree
#define commentscanYYfree_ALREADY_DEFINED
#else
#define yyfree commentscanYYfree
#endif

#ifdef yytext
#define commentscanYYtext_ALREADY_DEFINED
#else
#define yytext commentscanYYtext
#endif

#ifdef yyleng
#define commentscanYYleng_ALREADY_DEFINED
#else
#define yyleng commentscanYYleng
#endif

#ifdef yyin
#define commentscanYYin_ALREADY_DEFINED
#else
#define yyin commentscanYYin
#endif

#ifdef yyout
#define commentscanYYout_ALREADY_DEFINED
#else
#define yyout commentscanYYout
#endif

#ifdef yy_flex_debug
#define commentscanYY_flex_debug_ALREADY_DEFINED
#else
#define yy_flex_debug commentscanYY_flex_debug
#endif

#ifdef yylineno
#define commentscanYYlineno_ALREADY_DEFINED
#else
#define yylineno commentscanYYlineno
#endif

/* First, we deal with  platform-specific or compiler-specific issues. */

/* begin standard C headers. */
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>

/* end standard C headers. */

/* flex integer type definitions */

#ifndef FLEXINT_H
#define FLEXINT_H

/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */

#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L

/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
 * if you want the limit (max/min) macros for int types. 
 */
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS 1
#endif

#include <inttypes.h>
typedef int8_t flex_int8_t;
typedef uint8_t flex_uint8_t;
typedef int16_t flex_int16_t;
typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t;
#else
typedef signed char flex_int8_t;
typedef short int flex_int16_t;
typedef int flex_int32_t;
typedef unsigned char flex_uint8_t; 
typedef unsigned short int flex_uint16_t;
typedef unsigned int flex_uint32_t;

/* Limits of integral types. */
#ifndef INT8_MIN
#define INT8_MIN               (-128)
#endif
#ifndef INT16_MIN
#define INT16_MIN              (-32767-1)
#endif
#ifndef INT32_MIN
#define INT32_MIN              (-2147483647-1)
#endif
#ifndef INT8_MAX
#define INT8_MAX               (127)
#endif
#ifndef INT16_MAX
#define INT16_MAX              (32767)
#endif
#ifndef INT32_MAX
#define INT32_MAX              (2147483647)
#endif
#ifndef UINT8_MAX
#define UINT8_MAX              (255U)
#endif
#ifndef UINT16_MAX
#define UINT16_MAX             (65535U)
#endif
#ifndef UINT32_MAX
#define UINT32_MAX             (4294967295U)
#endif

#ifndef SIZE_MAX
#define SIZE_MAX               (~(size_t)0)
#endif

#endif /* ! C99 */

#endif /* ! FLEXINT_H */

/* begin standard C++ headers. */

/* TODO: this is always defined, so inline it */
#define yyconst const

#if defined(__GNUC__) && __GNUC__ >= 3
#define yynoreturn __attribute__((__noreturn__))
#else
#define yynoreturn
#endif

/* Returned upon end-of-file. */
#define YY_NULL 0

/* Promotes a possibly negative, possibly signed char to an
 *   integer in range [0..255] for use as an array index.
 */
#define YY_SC_TO_UI(c) ((YY_CHAR) (c))

/* Enter a start condition.  This macro really ought to take a parameter,
 * but we do it the disgusting crufty way forced on us by the ()-less
 * definition of BEGIN.
 */
#define BEGIN (yy_start) = 1 + 2 *
/* Translate the current start state into a value that can be later handed
 * to BEGIN to return to the state.  The YYSTATE alias is for lex
 * compatibility.
 */
#define YY_START (((yy_start) - 1) / 2)
#define YYSTATE YY_START
/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
/* Special action meaning "start processing a new file". */
#define YY_NEW_FILE yyrestart( yyin  )
#define YY_END_OF_BUFFER_CHAR 0

/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
#ifdef __ia64__
/* On IA-64, the buffer size is 16k, not 8k.
 * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
 * Ditto for the __ia64__ case accordingly.
 */
#define YY_BUF_SIZE 32768
#else
#define YY_BUF_SIZE 262144
#endif /* __ia64__ */
#endif

/* The state buf must be large enough to hold one state per character in the main buffer.
 */
#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))

#ifndef YY_TYPEDEF_YY_BUFFER_STATE
#define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
#endif

#ifndef YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
typedef size_t yy_size_t;
#endif

extern int yyleng;

extern FILE *yyin, *yyout;

#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2
    
    #define YY_LESS_LINENO(n)
    #define YY_LINENO_REWIND_TO(ptr)
    
/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up yytext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		*yy_cp = (yy_hold_char); \
		YY_RESTORE_YY_MORE_OFFSET \
		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
		} \
	while ( 0 )
#define unput(c) yyunput( c, (yytext_ptr)  )

#ifndef YY_STRUCT_YY_BUFFER_STATE
#define YY_STRUCT_YY_BUFFER_STATE
struct yy_buffer_state
	{
	FILE *yy_input_file;

	char *yy_ch_buf;		/* input buffer */
	char *yy_buf_pos;		/* current position in input buffer */

	/* Size of input buffer in bytes, not including room for EOB
	 * characters.
	 */
	int yy_buf_size;

	/* Number of characters read into yy_ch_buf, not including EOB
	 * characters.
	 */
	int yy_n_chars;

	/* Whether we "own" the buffer - i.e., we know we created it,
	 * and can realloc() it to grow it, and should free() it to
	 * delete it.
	 */
	int yy_is_our_buffer;

	/* Whether this is an "interactive" input source; if so, and
	 * if we're using stdio for input, then we want to use getc()
	 * instead of fread(), to make sure we stop fetching input after
	 * each newline.
	 */
	int yy_is_interactive;

	/* Whether we're considered to be at the beginning of a line.
	 * If so, '^' rules will be active on the next match, otherwise
	 * not.
	 */
	int yy_at_bol;

    int yy_bs_lineno; /**< The line count. */
    int yy_bs_column; /**< The column count. */

	/* Whether to try to fill the input buffer when we reach the
	 * end of it.
	 */
	int yy_fill_buffer;

	int yy_buffer_status;

#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
	/* When an EOF's been seen but there's still some text to process
	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
	 * shouldn't try reading from the input source any more.  We might
	 * still have a bunch of tokens to match, though, because of
	 * possible backing-up.
	 *
	 * When we actually see the EOF, we change the status to "new"
	 * (via yyrestart()), so that the user can continue scanning by
	 * just pointing yyin at a new input file.
	 */
#define YY_BUFFER_EOF_PENDING 2

	};
#endif /* !YY_STRUCT_YY_BUFFER_STATE */

/* Stack of input buffers. */
static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
static YY_BUFFER_STATE * yy_buffer_stack = nullptr; /**< Stack as an array. */

/* We provide macros for accessing buffer states in case in the
 * future we want to put the buffer states in a more general
 * "scanner state".
 *
 * Returns the top of the stack, or nullptr.
 */
#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
                          : nullptr)
/* Same as previous macro, but useful when we know that the buffer stack is not
 * nullptr or when we need an lvalue. For internal use only.
 */
#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]

/* yy_hold_char holds the character lost when yytext is formed. */
static char yy_hold_char;
static int yy_n_chars;		/* number of characters read into yy_ch_buf */
int yyleng;

/* Points to current character in buffer. */
static char *yy_c_buf_p = nullptr;
static int yy_init = 0;		/* whether we need to initialize */
static int yy_start = 0;	/* start state number */

/* Flag which is used to allow yywrap()'s to do buffer switches
 * instead of setting up a fresh yyin.  A bit of a hack ...
 */
static int yy_did_buffer_switch_on_eof;

void yyrestart ( FILE *input_file  );
void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer  );
YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size  );
void yy_delete_buffer ( YY_BUFFER_STATE b  );
void yy_flush_buffer ( YY_BUFFER_STATE b  );
void yypush_buffer_state ( YY_BUFFER_STATE new_buffer  );
void yypop_buffer_state ( void );

static void yyensure_buffer_stack ( void );
static void yy_load_buffer_state ( void );
static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file  );
#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER )

YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size  );
YY_BUFFER_STATE yy_scan_string ( const char *yy_str  );
YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len  );

void *yyalloc ( yy_size_t  );
void *yyrealloc ( void *, yy_size_t  );
void yyfree ( void *  );

#define yy_new_buffer yy_create_buffer
#define yy_set_interactive(is_interactive) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){ \
        yyensure_buffer_stack (); \
		YY_CURRENT_BUFFER_LVALUE =    \
            yy_create_buffer( yyin, YY_BUF_SIZE ); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
	}
#define yy_set_bol(at_bol) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){\
        yyensure_buffer_stack (); \
		YY_CURRENT_BUFFER_LVALUE =    \
            yy_create_buffer( yyin, YY_BUF_SIZE ); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
	}
#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)

/* Begin user sect3 */

#define commentscanYYwrap() (/*CONSTCOND*/1)
#define YY_SKIP_YYWRAP
typedef flex_uint8_t YY_CHAR;

FILE *yyin = nullptr, *yyout = nullptr;

typedef int yy_state_type;

extern int yylineno;
int yylineno = 1;

extern char *yytext;
#ifdef yytext_ptr
#undef yytext_ptr
#endif
#define yytext_ptr yytext

static yy_state_type yy_get_previous_state ( void );
static yy_state_type yy_try_NUL_trans ( yy_state_type current_state  );
static int yy_get_next_buffer ( void );
static void yynoreturn yy_fatal_error ( const char* msg  );

/* Done after the current pattern has been matched and before the
 * corresponding action - sets up yytext.
 */
#define YY_DO_BEFORE_ACTION \
	(yytext_ptr) = yy_bp; \
	yyleng = (int) (yy_cp - yy_bp); \
	(yy_hold_char) = *yy_cp; \
	*yy_cp = '\0'; \
	(yy_c_buf_p) = yy_cp;
#define YY_NUM_RULES 245
#define YY_END_OF_BUFFER 246
/* This struct is not used in this scanner,
   but its presence is necessary. */
struct yy_trans_info
	{
	flex_int32_t yy_verify;
	flex_int32_t yy_nxt;
	};
static const flex_int16_t yy_acclist[1033] =
    {   0,
      101,  101,  159,  159,  174,  174,  189,  189,  233,  233,
      180,  180,  246,  245,   62,  245,   62,  245,   60,  245,
       62,  245,   62,  245,   62,  245,   62,  245,   59,   62,
      245,   62,  245,   62,  245,   42,   62,  245,   62,  245,
       62,  245,   62,  245,   62,  245,   62,  245,   62,  245,
       62,  245,   59,   62,  245,   62,  245,   62,  245,  120,
      245,  119,  245,  120,  245,  117,  120,  245,  120,  245,
      120,  245,  123,  245,  121,  245,  123,  245,  123,  245,
      148,  245,  147,  245,  145,  148,  245,  148,  245,   96,
      245,   96,  245,   95,  245,   92,   96,  245,   96,  245,

       96,  245,   92,   96,  245,   96,  245,   96,  245,  100,
      245,   97,  245,  100,  245,   98,  100,  245,  100,  245,
      100,  245,  100,  245,  104,  245,  103,  245,  101,  104,
      245,  101,  104,  245,  104,  245,  101,  104,  245,  101,
      104,  245,  104,  245,   96,  245,   95,  245,   96,  245,
       96,  245,   96,  245,   96,  245,   96,  245,  108,  245,
      108,  245,  107,  245,  105,  108,  245,  108,  245,  108,
      245,  105,  108,  245,  108,  245,  108,  245,  136,  245,
      135,  245,  133,  136,  245,  136,  245,  140,  245,  139,
      245,  140,  245,  140,  245,  144,  245,  143,  245,  144,

      245,  144,  245,  132,  245,  129,  245,  132,  245,  130,
      132,  245,  132,  245,  132,  245,  128,  245,  126,  245,
      127,  128,  245,16508,  125,  128,  245,  128,  245,   82,
      245,   81,  245,   79,   82,  245,   82,  245,   86,  245,
       86,  245,   85,  245,   83,   86,  245,   86,  245,   86,
      245,   83,   86,  245,   86,  245,   86,  245,   90,  245,
       89,  245,   87,   90,  245,   90,  245,  112,  245,  111,
      245,  109,  112,  245,  112,  245,  114,  116,  245,  115,
      245,  116,  245,  154,  245,  153,  245,  152,  154,  245,
      154,  245,  159,  162,  245,  155,  245,  159,  162,  245,

      162,  245,  162,  245,  165,  245,  164,  245,  163,  165,
      245,  165,  245,  168,  245,  168,  245,  166,  245,  168,
      245,  168,  245,  174,  178,  245,  175,  245,  178,  245,
      178,  245,  178,  245,  178,  245,  178,  245,  151,  245,
      149,  245,  151,  245,  187,  245,  187,  245,  185,  245,
      179,  187,  245,  184,  187,  245,  187,  245,  190,  245,
      189,  190,  245,  188,  245,  190,  245,  197,  198,  245,
      196,  245,  198,  245,  198,  245,  198,  245,  208,  209,
      245,  199,  245,  209,  245,  209,  245,  209,  245,  212,
      245,  210,  245,  212,  245,  216,  245,  214,  245,  213,

      216,  245,  216,  245,  219,  222,  245,  217,  245,  220,
      222,  245,  221,  222,  245,  222,  245,  222,  245,  225,
      245,  223,  245,  225,  245,  228,  245,  227,  245,  226,
      228,  245,  228,  245,  231,  245,  230,  245,  229,  231,
      245,  231,  245,   76,   78,  245,   77,  245,   78,  245,
       78,  245,   78,  245,  171,  245,  170,  245,  169,  171,
      245,  171,  245,   65,   66,  245,   64,  245,   66,  245,
       66,  245,   15,  245,   14,  245,   15,  245,   15,  245,
       15,  245,   13,   15,  245,   15,  245,   15,  245,   15,
      245,  233,  235,  245,  234,  245,  235,  245,  235,  245,

      235,  245,  238,  245,  237,  245,  238,  245,  236,  238,
      245,  238,  245,  241,  244,  245,  239,  245,  242,  244,
      245,  243,  244,  245,  244,  245,  244,  245,  180,  245,
      180,  183,  245,  181,  245,  182,  245,   70,   71,  245,
       68,  245,   69,   71,  245,   71,  245,   71,  245,   58,
        4,   51,   53,   55,   53,   10,   41,   41,   32,   32,
       32,   32,   32,   39,   40,   34,   41,   42,   32,   32,
       32,   32,   32,   32,   61,   45,   46,   51,   43,  117,
      117,  118,  117,  122,  145,  146,   92,   92,   92,   94,
       92,   98,   98,   99,   98,  101,  101,  101,  101,  101,

      101,  102,  101,  105,  105,  105,  106,  105,  133,  134,
      137,  138,  142,  141,  142,  130,  130,  131,  130,  127,
    16508, 8316,   79,   79,   80,   83,   83,   83,   84,   83,
       87,   88,  109,  110,  114,  113,  152,  159,  155,  159,
      161,  161,  158,  161,  163,  167,  174,  177,  176,  150,
      179,  184,  186,  189,  188,  197,  208,  211,  213,  215,
      219,  218,  224,  226,  229,   76,  169,   65,   12,   13,
      233,  232,  236,  241,  240,  180,   70,   41,   32,   52,
       50,   57,   53,   57,   57,   57,   53,   57,   57,   54,
       10,    6,   49,    1,    1,    2,   32,   32,   32,   36,

       37,   38,   32,   32,   34,    5,   32,   32,   32,   32,
       32,   47,   50,   44,  117,  117,  145,   92,   98,   98,
      101,  101,  101,  105,  130,  130,   79,   79,   79,   83,
       87,  160,  160,  226,  229,   72,   73,   74,   75,   63,
      232,  236,  236,   67,   32,   57,   57,   24,   48,    1,
       33,    2,   31,   32,   32,   32,   32,   32,   32,   32,
       32,   32,  117,   91,   98,  101,  101,   93,  130,   79,
       79,   87,  160,  160,  192,  200,   63,   11,  236,   32,
       23,   56,    6,   21,   31,   32,   32,   32,   35,   31,
       35,   32,   32,   32,   32,   32,   32,  117,   98,  101,

      130,   79,   79,  160,   11,   32,    3,   22,    7,   32,
       32,   32,   35,   32,   32,   32,   32,   32,   32,  117,
       98,  101,  130,  109,  160,  194,  202,   11,   32,   32,
       32,   32,   32,   32,   32,   32,   32,   32,  117,   98,
      101,  130,  160,  173,  193,  191,  201,   32,   32,   32,
       32,   32,   32,   32,   32,   32,  117,   98,  101,  130,
      160,  172,  195,   32,   25,   20,    8,   16,   18,   32,
       32,   32,   30,   32,   32,   32,   32,  117,   98,  101,
      130,  160,  203,   32,    9,   17,   19,   32,   32,   32,
       32,   32,   32,   32,  117,   98,  101,  130,  160,   32,

       32,   32,   32,   32,   32,   32,   32,  117,   98,  101,
      130,  160,  206,   32,   32,   26,   32,   32,   32,   26,
       32,   32,   32,  117,   98,  101,  130,  160,  207,  204,
       32,   32,   26,   32,   29,   32,   32,   29,   32,   32,
      117,   98,  101,  130,  160,  207,   32,   32,   29,   32,
       32,   32,  117,   98,  101,  130,  160,   32,   32,   32,
       32,  117,   98,  101,  130,  160,  205,   32,   28,   32,
       28,   32,   27,   32,   60,  117,  119,  121,  147,   95,
       97,   98,  101,  103,  107,  135,  139,  143,  129,  130,
      126,   81,   85,   89,  111,  115,  153,  160,  157,  164,

      166,  175,  149,  185,  196,  199,  210,  214,  217,  223,
      227,  230,  170,   64,   14,  234,  237,  239,   68,   27,
       32,   28,   32,   27,   32,    5,  156,  160,   27,   32,
      156,   58
    } ;

static const flex_int16_t yy_accept[1747] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    2,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    4,    5,    5,    5,    5,    5,    6,
        7,    7,    7,    7,    7,    8,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,   10,   11,   11,   11,   11,
       11,   12,   13,   13,   13,   14,   15,   17,   19,   21,

       23,   25,   27,   29,   32,   34,   36,   39,   41,   43,
       45,   47,   49,   51,   53,   56,   58,   60,   62,   64,
       66,   69,   71,   73,   75,   77,   79,   81,   83,   85,
       88,   90,   92,   94,   96,   99,  101,  103,  106,  108,
      110,  112,  114,  116,  119,  121,  123,  125,  127,  129,
      132,  135,  137,  140,  143,  145,  147,  149,  151,  153,
      155,  157,  159,  161,  163,  165,  168,  170,  172,  175,
      177,  179,  181,  183,  186,  188,  190,  192,  194,  196,
      198,  200,  202,  204,  206,  208,  210,  213,  215,  217,
      219,  221,  225,  228,  230,  232,  234,  237,  239,  241,

      243,  245,  248,  250,  252,  255,  257,  259,  261,  263,
      266,  268,  270,  272,  275,  277,  280,  282,  284,  286,
      288,  291,  293,  296,  298,  301,  303,  305,  307,  309,
      312,  314,  316,  318,  320,  322,  324,  327,  329,  331,
      333,  335,  337,  339,  341,  343,  345,  347,  349,  351,
      354,  357,  359,  361,  364,  366,  368,  371,  373,  375,
      377,  379,  382,  384,  386,  388,  390,  392,  394,  396,
      398,  400,  403,  405,  408,  410,  413,  416,  418,  420,
      422,  424,  426,  428,  430,  433,  435,  437,  439,  442,
      444,  447,  449,  451,  453,  455,  457,  459,  462,  464,

      467,  469,  471,  473,  475,  477,  479,  481,  483,  486,
      488,  490,  492,  495,  497,  499,  501,  503,  505,  507,
      509,  512,  514,  517,  519,  522,  525,  527,  529,  531,
      534,  536,  538,  541,  543,  546,  548,  550,  550,  550,
      550,  550,  551,  551,  551,  552,  552,  552,  552,  552,
      553,  554,  555,  555,  556,  556,  556,  556,  557,  557,
      557,  557,  557,  557,  557,  557,  557,  557,  557,  558,
      558,  559,  560,  561,  562,  563,  564,  565,  566,  568,
      569,  569,  570,  571,  572,  573,  574,  575,  576,  576,
      576,  576,  576,  576,  576,  577,  578,  579,  579,  580,

      580,  580,  580,  580,  580,  581,  582,  582,  582,  582,
      583,  584,  585,  585,  586,  586,  586,  586,  587,  587,
      587,  587,  587,  588,  589,  589,  589,  589,  590,  590,
      591,  591,  591,  592,  592,  593,  594,  594,  594,  594,
      595,  596,  596,  597,  598,  598,  599,  600,  601,  601,
      601,  602,  602,  603,  604,  604,  604,  604,  604,  604,
      604,  604,  604,  604,  604,  604,  604,  604,  604,  604,
      605,  606,  606,  606,  607,  607,  608,  608,  608,  609,
      610,  610,  611,  611,  611,  612,  612,  614,  614,  614,
      615,  615,  616,  616,  616,  617,  618,  618,  618,  618,

      619,  620,  620,  622,  623,  623,  623,  624,  625,  625,
      625,  626,  626,  626,  626,  626,  627,  628,  628,  628,
      629,  629,  630,  630,  630,  631,  632,  632,  632,  633,
      633,  634,  634,  634,  635,  635,  636,  636,  637,  637,
      638,  638,  639,  640,  641,  641,  642,  643,  643,  644,
      645,  645,  646,  646,  646,  646,  646,  647,  647,  648,
      649,  650,  650,  650,  650,  651,  651,  651,  652,  653,
      653,  654,  654,  655,  656,  656,  656,  657,  657,  657,
      657,  658,  658,  658,  658,  658,  658,  658,  659,  659,
      660,  660,  661,  661,  662,  662,  663,  663,  663,  664,

      664,  665,  665,  665,  665,  666,  666,  666,  666,  667,
      667,  667,  667,  668,  668,  669,  669,  669,  669,  670,
      670,  671,  671,  671,  671,  672,  673,  673,  673,  674,
      674,  674,  675,  675,  676,  676,  677,  678,  678,  678,
      679,  680,  680,  680,  680,  680,  681,  682,  683,  685,
      686,  687,  689,  690,  691,  691,  691,  691,  691,  691,
      691,  692,  692,  692,  692,  692,  692,  692,  692,  692,
      693,  693,  693,  693,  693,  693,  694,  695,  696,  697,
      698,  698,  699,  700,  701,  702,  703,  704,  704,  705,
      706,  707,  708,  709,  710,  711,  712,  712,  712,  712,

      712,  713,  714,  714,  715,  716,  716,  717,  717,  718,
      718,  718,  718,  718,  719,  720,  720,  721,  722,  722,
      723,  723,  724,  724,  724,  724,  724,  725,  725,  725,
      725,  726,  726,  727,  727,  728,  729,  730,  730,  730,
      731,  732,  732,  732,  732,  732,  732,  732,  733,  734,
      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
      734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
      734,  734,  735,  735,  736,  736,  737,  738,  739,  740,
      740,  740,  741,  741,  741,  741,  741,  742,  742,  743,
      743,  743,  744,  744,  744,  744,  745,  745,  746,  746,

      746,  746,  747,  748,  749,  749,  749,  749,  749,  749,
      749,  749,  749,  749,  749,  749,  749,  749,  749,  749,
      749,  750,  751,  752,  753,  753,  754,  755,  756,  757,
      757,  757,  758,  758,  759,  760,  761,  762,  763,  763,
      763,  763,  764,  764,  764,  764,  765,  765,  765,  766,
      767,  767,  768,  769,  769,  769,  769,  769,  770,  770,
      771,  772,  772,  772,  773,  773,  773,  773,  773,  773,
      773,  774,  775,  775,  775,  775,  775,  775,  775,  775,
      775,  775,  775,  776,  776,  776,  776,  777,  777,  777,
      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,

      778,  778,  778,  778,  779,  779,  779,  779,  780,  780,
      780,  780,  781,  781,  782,  782,  782,  783,  783,  783,
      783,  783,  783,  783,  783,  783,  783,  783,  785,  785,
      785,  785,  786,  787,  788,  789,  790,  792,  793,  794,
      795,  796,  797,  798,  798,  799,  799,  799,  799,  800,
      801,  801,  801,  801,  801,  802,  802,  803,  804,  804,
      804,  804,  804,  804,  804,  804,  804,  805,  805,  805,
      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
      805,  805,  805,  805,  805,  805,  805,  805,  805,  805,

      805,  805,  805,  805,  806,  806,  806,  806,  806,  806,
      806,  807,  807,  808,  808,  808,  809,  809,  809,  809,
      809,  809,  810,  810,  810,  810,  810,  810,  811,  812,
      813,  814,  815,  816,  817,  818,  819,  820,  821,  821,
      821,  821,  822,  823,  823,  823,  823,  823,  824,  824,
      824,  824,  824,  825,  825,  825,  825,  825,  826,  826,
      826,  826,  826,  826,  826,  826,  826,  826,  826,  826,
      826,  826,  826,  826,  826,  826,  826,  827,  827,  827,
      827,  827,  828,  828,  828,  828,  828,  828,  828,  828,
      828,  828,  828,  828,  828,  828,  828,  828,  829,  829,

      829,  829,  829,  829,  829,  829,  830,  830,  830,  830,
      830,  830,  830,  830,  830,  830,  830,  830,  831,  832,
      833,  834,  835,  836,  837,  838,  839,  840,  840,  840,
      840,  841,  842,  842,  842,  842,  842,  843,  843,  843,
      843,  843,  843,  843,  843,  843,  844,  844,  844,  844,
      844,  844,  844,  844,  844,  844,  844,  845,  845,  845,
      845,  845,  845,  845,  845,  845,  846,  847,  847,  847,
      848,  848,  848,  848,  848,  848,  848,  848,  848,  848,
      848,  848,  848,  848,  848,  848,  848,  848,  848,  849,
      849,  849,  849,  849,  849,  849,  849,  849,  849,  850,

      851,  852,  853,  854,  855,  856,  857,  858,  858,  858,
      858,  859,  860,  860,  860,  860,  860,  861,  861,  861,
      861,  861,  861,  861,  861,  861,  862,  862,  862,  862,
      862,  863,  863,  863,  863,  863,  863,  863,  863,  863,
      863,  863,  863,  864,  864,  864,  864,  864,  864,  864,
      864,  864,  864,  864,  864,  864,  864,  864,  864,  864,
      864,  864,  864,  864,  865,  865,  866,  866,  866,  866,
      866,  867,  867,  868,  869,  870,  871,  872,  873,  874,
      875,  876,  877,  878,  879,  879,  879,  879,  880,  881,
      881,  881,  881,  881,  882,  882,  882,  882,  882,  882,

      882,  882,  882,  883,  883,  883,  883,  883,  883,  883,
      883,  883,  883,  883,  883,  883,  883,  883,  883,  883,
      883,  883,  884,  884,  884,  884,  884,  884,  884,  884,
      884,  884,  884,  884,  884,  884,  884,  884,  884,  885,
      885,  886,  887,  888,  888,  888,  888,  888,  889,  890,
      891,  892,  893,  894,  895,  896,  896,  896,  896,  897,
      898,  898,  898,  898,  898,  899,  899,  899,  899,  899,
      899,  899,  899,  899,  900,  900,  900,  900,  900,  900,
      900,  900,  900,  900,  900,  900,  900,  900,  900,  900,
      900,  900,  900,  900,  900,  900,  900,  900,  900,  900,

      900,  900,  900,  900,  900,  900,  900,  900,  900,  901,
      901,  902,  903,  904,  905,  906,  907,  908,  909,  909,
      909,  909,  910,  911,  911,  911,  911,  911,  912,  912,
      912,  912,  912,  912,  912,  912,  912,  913,  913,  913,
      913,  913,  913,  913,  913,  913,  913,  913,  913,  913,
      913,  913,  914,  914,  914,  914,  914,  914,  914,  914,
      914,  914,  914,  914,  914,  914,  914,  914,  914,  915,
      915,  916,  918,  919,  920,  922,  923,  924,  925,  925,
      925,  925,  926,  927,  927,  927,  927,  927,  928,  928,
      928,  928,  928,  928,  928,  928,  928,  929,  929,  929,

      929,  929,  929,  929,  929,  929,  929,  929,  930,  931,
      931,  931,  931,  931,  931,  931,  931,  931,  931,  931,
      931,  931,  931,  931,  931,  932,  932,  933,  935,  937,
      938,  940,  941,  942,  942,  942,  942,  943,  944,  944,
      944,  944,  944,  945,  945,  945,  945,  945,  945,  945,
      945,  945,  946,  946,  946,  946,  946,  946,  946,  946,
      946,  946,  947,  947,  947,  947,  947,  947,  947,  947,
      947,  947,  947,  947,  947,  947,  947,  947,  948,  948,
      949,  951,  952,  953,  954,  954,  954,  954,  955,  956,
      956,  956,  956,  956,  957,  957,  957,  957,  957,  957,

      957,  957,  957,  958,  958,  958,  958,  958,  958,  958,
      958,  958,  958,  958,  958,  958,  958,  958,  958,  958,
      958,  958,  958,  958,  958,  958,  958,  958,  959,  959,
      960,  961,  962,  963,  963,  963,  963,  964,  965,  965,
      965,  965,  965,  966,  966,  966,  966,  966,  966,  966,
      966,  966,  967,  967,  967,  967,  967,  967,  967,  967,
      967,  968,  968,  968,  968,  968,  968,  968,  968,  968,
      968,  968,  968,  968,  968,  968,  969,  969,  971,  973,
      976,  978,  979,  980,  981,  983,  985,  986,  987,  988,
      989,  991,  992,  993,  994,  995,  996,  997,  998,  998,

      999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008,
     1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018,
     1019, 1020, 1022, 1024, 1026, 1027, 1027, 1029, 1031, 1031,
     1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032,
     1032, 1032, 1032, 1032, 1033, 1033
    } ;

static const YY_CHAR yy_ec[256] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
        1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    5,    6,    7,    8,    9,   10,   11,   12,   13,
       14,   15,   16,   17,   18,   19,   20,   21,   22,   22,
       22,   22,   22,   22,   23,   23,   23,   24,   25,   26,
       27,   28,   29,   30,   31,   32,   33,   34,   35,   36,
       37,   38,   39,   36,   40,   41,   42,   43,   44,   45,
       36,   46,   47,   48,   49,   50,   36,   36,   51,   36,
       52,   53,   54,    1,   55,    1,   56,   57,   58,   59,

       60,   61,   62,   63,   64,   36,   65,   66,   67,   68,
       69,   70,   36,   71,   72,   73,   74,   75,   76,   77,
       78,   36,   79,   80,   81,   82,    1,   83,   83,   83,
       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
       83,   84,   84,   84,   84,   84,   84,   84,   84,   84,

       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
       84,   84,   84,   84,   84
    } ;

static const YY_CHAR yy_meta[85] =
    {   0,
        1,    2,    3,    4,    5,    1,    6,    7,    8,    9,
       10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
       20,   20,   20,   21,   22,   23,    1,   24,   25,   26,
       27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
       27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
       27,    1,   28,   29,   30,   27,   27,   27,   27,   27,
       27,   27,   27,   31,   27,   27,   27,   32,   27,   27,
       27,   27,   27,   27,   27,   27,   27,   27,   33,   34,
       35,   36,   37,   37
    } ;

static const flex_int16_t yy_base[2000] =
    {   0,
        0,    0,    0,   83,  163,  245,   83,   84,  327,    0,
      411,    0,  495,  577,  659,  741,  823,    0,  907,    0,
      991,    0,   86,   87,   88,   89, 1075, 1157, 1239,    0,
     1323,    0, 1407,    0, 1491,    0, 1575,    0,   94,   97,
     1659,    0,  100,  101, 1743,    0,  118,  141,  181,  203,
      105,  106, 1827,    0,  200,  222,  121,  233,  236,  508,
      107,  108, 1911,    0,  264,  503,  109,  126, 1995,    0,
     2079,    0,  182,  258,  265,  500,  515,  532, 2163,    0,
      540,  547, 2245, 2246,  592,  595, 2314, 2396,  614,  640,
      114,  119,  678,  746, 7228,13085,13085,  558,  226, 7220,

        0, 7196,  127,  266, 2473, 2540,  678, 2615,  704, 7142,
     1115,  147,  202, 1117, 2427,  282,  618,13085,13085, 7217,
      517,  520, 2434,13085,13085,  167,  500,13085,13085,  190,
      217,13085,  773,  777, 2351, 2267, 7198,  783,  549,  195,
    13085,13085, 7214,  627,  671, 7187, 2462,13085,13085, 2697,
     1090, 1168, 2283,13085, 2552, 1196, 1200, 2560, 2276, 7190,
     2486,  304,13085, 2258, 2357, 2585, 2633, 7189, 2625,  613,
      311,13085,13085,    0,  700,13085,13085, 7205, 1148,13085,
    13085, 7201, 2383,13085,13085, 7200, 1087, 1170, 2728,13085,
    13085,  529,13085, 7141,13085,13085, 2659, 2466,13085, 2734,

     2738, 2761, 2767, 7180, 2785, 2492,  318,13085,13085, 7184,
     2511,13085,13085, 7183, 2522,    0,13085, 2589,13085,13085,
        0, 7137,  556,13085, 7147, 2785, 2866,13085,13085,    0,
     7134,13085,  619,13085, 7190, 7132,    0,13085,13085, 7174,
     7178, 7132,   74,13085,13085, 2629,13085,  208,13085,13085,
      636, 2668,13085, 2387,13085, 7127,    0,13085,13085,  166,
      465,    0,13085,13085,  744, 1072,13085,13085, 2795,13085,
    13085,    0, 2800,    0,13085,13085,13085,13085, 2814,13085,
    13085, 2818,13085,13085,  268, 7126,13085,13085,  508, 7125,
        0,13085, 7127, 7125, 7124,13085,13085,    0, 7119,    0,

    13085, 7164, 7115,13085,13085, 7171, 7165, 7148,13085,  122,
      511, 7108,    0,13085,13085, 7086,  550,13085,13085,    0,
     7148, 7102,    0,13085,13085,13085,13085, 2822,    0,    0,
    13085,13085,    0,13085,13085, 7101, 7105, 2805, 2941, 3016,
     2593, 2612, 7093, 7149,13085, 7131, 7124,    0,  235,  539,
    13085,13085, 3098, 7122,  632,  258, 2838,  712, 2797, 2773,
     1102,  566,  609, 2824,  647,  661,  706,  732,13085, 7133,
      558, 3181, 7037, 7010, 2675, 6972,13085,13085,    0, 2882,
     2899, 2292, 2382, 2846, 2926, 2885, 2921, 6954, 3013,  650,
     2345,  716,  796, 2939,  801, 2941, 2979,  808,13085, 1091,

     1195, 2968, 2975, 7029,13085, 2514, 2230, 2636, 1110,13085,
     2666,13085, 6967,  765,    0, 7010, 1224,13085, 6962, 3048,
     3191, 7005, 3059, 3195, 1228, 2498, 3199, 3222, 2303,13085,
     6959, 2842, 7000, 7018,13085, 2887, 2439, 2936, 2377,13085,
     2988, 7017,  702, 3281, 3363, 7016,13085, 3223, 2810, 3225,
     7015, 2608,13085, 3251, 3233, 3312, 6996, 3319, 3394,    0,
     3401, 3087, 3347, 3428, 3262, 1103, 3323, 3432, 6995, 3455,
     3459, 3351, 3463, 3467, 2645,13085, 6948, 3406,    0,    0,
     2886,13085, 6947, 7007,13085, 2931,13085, 6945, 7002,13085,
     3055,13085, 6940, 6999,13085, 3321, 2938, 3402, 3079,13085,

     3456, 1081, 2468,13085, 6937, 3491, 3495, 3499, 6980, 3098,
    13085, 6935, 3508, 3531, 6978, 3535, 3539, 3503, 3562, 3566,
     3182,13085, 6933, 3526,    0, 6981,    0, 3203,13085, 6931,
     6979, 6934, 3226,13085, 6928,    0, 3487,13085, 6927,    0,
     6926, 2525,13085, 6940,  502,13085,    0, 3544,13085, 6928,
     6923,    0, 6922, 2330, 6982, 6980,13085, 6918,    0,13085,
    13085, 6912, 6911, 3570,13085, 6910, 2254,13085, 2291, 3574,
    13085, 6909, 3586,13085, 6909, 6904,    0,  234, 6909,  668,
        0, 6901, 6907, 6911,  731,  722, 3590,13085, 6898,    0,
     3594,13085, 6895,    0, 3598,13085, 6893, 3602,13085, 6892,

     1189,    0, 6935, 6890, 2268,    0, 6933, 6888,    0, 6946,
     6940,  518,    0, 6885,    0, 1200, 6883, 6943,13085, 6931,
    13085, 6915, 2209, 6873,    0,    0, 6869, 1172, 6917,    0,
     6866,    0, 3606,13085, 6865,    0,    0, 6864, 6903, 6869,
     2572, 6860, 6903,    0, 6906, 1121, 6894,13085,13085, 6893,
     3644, 6892, 6902,13085, 6902, 6886, 2382, 2385, 2448, 2435,
     3612, 2490, 2623, 2661, 2687, 2724, 2672, 2769, 2940,13085,
     2790, 2805, 2812, 2814, 2870, 6900, 1144, 3727,    0, 2341,
     6836, 2970, 3551,13085,13085,13085, 3555, 3806, 3732,    0,
        0, 3267, 3746, 3770, 3775, 3776, 3747, 2346, 3427, 3758,

    13085, 3765, 3848, 2597, 3711, 3720, 3820, 6842, 2333, 6841,
     3618, 3866, 6834, 6880, 3734, 3777, 3843, 2427, 3928, 3891,
     3893, 3942, 6891, 2754, 2911, 6828,    0, 6827, 6825, 6824,
     3855, 3883, 3939, 6823, 3981, 3995, 3969, 6822, 6821,    0,
     6872, 6816, 6815, 6814, 6813, 6812, 6820,    0, 6815, 6809,
     6808, 6806, 6819, 6799, 6798, 6797, 6796, 6793, 6805, 6794,
     6788, 6801, 3028, 6788, 6800, 6800, 6783, 6782, 6781, 6780,
     6779, 2359, 6778, 2395, 6777,13085,13085,13085,13085, 6776,
     6820, 2703, 6774, 2647, 2950, 6773,    0, 6772,13085, 1215,
        0, 6824, 6769, 6763, 6762,13085, 2995, 3546, 6761, 6824,

        0, 3564, 3009,13085, 6795, 2997, 3019, 3146, 3213, 3211,
     3226, 3242, 3328, 6800, 3066, 3371, 3741, 3397, 3520, 3561,
    13085, 3215,13085,    0, 6745, 3287, 3786, 3841, 3962, 6744,
     4041, 3985, 6771, 3922, 4009, 3986, 4019, 4023, 4079, 4087,
     4110, 4090, 6763, 6762, 3878,13085, 4032, 6759, 4111, 4190,
     4272, 4125,13085, 6757, 6756, 6755, 6754, 4117, 6753, 4114,
     4152, 6751, 6750, 6790, 6747, 6739, 6739, 6738, 6737, 6725,
        0, 6719, 6730, 6729, 6728, 4162, 6727, 6726, 6724, 6723,
     6721, 6716,13085, 6710, 6718, 6713,13085, 6707, 6719, 6701,
     6701, 6711, 6710, 6703, 6702, 6701, 6697, 6696, 6694, 3479,

     6693,    0,    0,    0, 6692, 6691, 2455, 6731, 6687, 6685,
     6684, 3890, 6683,13085, 6723, 3617,13085, 6710, 3581, 6711,
     3587, 3582, 3702, 3724, 4072, 3813, 4073,13085, 3830, 3853,
     3862, 3483, 4027, 4156, 4025, 6659, 4081, 4167, 4177, 4179,
     4181, 4249, 4250, 4303, 4127, 6666, 6664, 6663, 4169, 4311,
     6657, 6656, 6655, 6654, 4242, 6650, 4338, 4344, 6646, 6644,
     6643, 6642, 6635, 6634, 6633, 6630, 6641, 6629, 6592, 6588,
     6589, 6588, 6583, 6596, 2467, 6575, 6580, 3569, 6579, 6574,
     6568, 6566, 6565, 6571, 6573, 6559, 6560, 2207, 6522, 6529,
     6526, 1133, 6518, 6517, 6513, 6512, 6510, 6509, 6508, 6507,

     6506, 6569, 6563,    0, 6503, 6502, 2534, 6501, 6500, 6499,
     4302, 6498, 6549, 6519, 3875,13085, 3880, 3975, 3969, 4062,
     4124,13085, 4121, 6538, 4137, 4161, 4167, 4243, 4307, 4278,
    13085, 4332, 4353, 4367, 4369, 4373, 4374, 4368, 6497, 6496,
     6494, 4370, 4377, 6493, 6487, 6486, 6485, 4389, 6484, 6480,
     6479, 6477,13085, 6476, 6475, 6473, 6478, 6465, 6467, 6466,
     6465, 6473, 1107, 6464, 6457, 6461, 6470, 6465, 6459, 6447,
     6458, 6450, 6444, 6443, 6441, 6440,13085, 6446,    0,    0,
     6438,13085, 6432, 3636, 6432, 6433, 6442, 6442, 6430, 6429,
     6428, 6427, 6426, 6425, 6424, 6422, 6421,13085, 6475, 6469,

     6412, 6408, 6407, 6405, 6404, 4393, 6403, 6438, 4209, 4223,
     4219, 4225, 6438, 4426, 4247, 4264,  561, 4397, 4398, 4405,
     4410, 4412, 4432, 4414, 4442, 4454, 4444, 6408, 6407, 6406,
     4482, 4489, 6405, 6404, 6403, 6402, 4495, 6401, 6400, 6398,
     6397, 6391, 6390, 6389, 6373, 6372, 6383, 6381, 6380, 6375,
     6377,    0, 6367, 6370, 6359, 6358,13085, 6369, 6359, 6355,
     6367, 6366, 6365, 6364,    0,13085,13085, 6361, 6356,13085,
     6359, 6346, 6337, 6334, 6349, 6348, 6347, 6341, 6339, 6338,
     6337, 6336, 6334, 6333, 6297, 6292, 6287, 6283, 4464, 6280,
     6283, 4291, 4298, 2313, 4476, 4477, 6306, 6305, 4468, 4485,

     4520, 4532, 4521, 4522, 4539, 4544, 4538, 6266, 6264, 6263,
     4549, 4558, 6262, 6261, 6260, 6259, 4561, 6251, 6250, 6247,
     6246, 6245, 6244, 6243, 6239, 6248, 6234, 6229, 6225, 6219,
    13085, 6218, 6209, 6217, 6216, 6223, 6217, 6201, 6199, 6198,
     6197, 6193,13085, 6188, 6177, 6175, 3740, 6177, 6176, 6167,
     6166, 6165, 6164, 6160, 6159, 6157, 6155, 6154, 6153, 6152,
     6148, 6147, 6142, 4565, 6104,13085, 5139, 5138, 5131, 4593,
    13085, 4601,13085,13085,13085, 4558, 4574, 4582, 3290, 4603,
     4607, 4614, 4623, 4615, 5103, 5098, 5097, 4626, 4645, 5091,
     5089, 5082, 5075, 4639, 5068, 5066, 5059, 5058, 5055, 5053,

     5034, 5028, 5012, 5018, 5017, 5006, 4947, 4909, 4907, 4883,
       52,   46,   89,  227,  580,  637,  673,  697,  708,  703,
      749,13085, 1022, 1094, 1123, 1180, 2200, 2209, 2246, 2257,
     2310, 2363, 2372, 2373, 2383, 2411, 2417, 2441, 4628, 2497,
    13085,13085,13085, 2533, 4638, 2541, 4646, 4636, 4652, 4675,
     4683, 4694, 4704, 4711, 4671, 2519, 2537, 2552, 4702, 4710,
     2554, 2573, 2592, 2603, 4722, 2612, 2626, 2647, 2652, 2662,
     2663, 2679, 2680, 2700, 2695, 2702, 2707, 2710, 2735, 2750,
     2744, 2764, 2786, 2791, 2784, 2807, 2827, 2866, 2881, 2895,
     2910, 3788, 2908, 2910, 2921, 2922, 2930, 2940, 2950, 2951,

     2968, 2972, 2973, 2999, 3009, 3020, 3021, 3146, 4699, 3150,
     4723, 4718, 4730, 4738, 4746, 4754, 4765, 4774, 3158, 3169,
     3175, 4781, 4796, 3176, 3186, 3190, 3192, 4802, 3197, 3204,
     3233, 3239, 3254, 3265, 3266, 3284, 3278, 3284, 3293, 3294,
     3310, 3303, 3319, 3319, 3317, 3331, 3336, 3337, 3348, 3355,
     3357,13085, 3859, 3360, 3374, 3375, 3376, 3390, 3409, 3413,
     3461, 3462, 3488, 3497, 3510, 3520, 3534, 3542, 4767, 3564,
     4756, 4777, 4784, 4806, 4790, 4808, 4835, 4848, 3572, 3574,
     3665, 4851, 4870, 3670, 3679, 3687, 3688, 4854, 3689, 3694,
     3706, 3717, 3718, 3724, 3726, 3732, 3736, 3734, 3736, 3741,

     3769, 3778, 3789, 3810, 3823, 3831, 3836, 3963,13085, 3849,
     3855, 3857, 3863, 3892, 3908, 3909, 3911, 3921, 3926, 3928,
     3954, 3955, 3958, 3965, 4834, 3972, 4849, 4161, 4845, 4874,
     4878, 4890, 4891, 3986, 4003, 4020, 4901, 4928, 4027, 4031,
     4047, 4067, 4913, 4088, 4108, 4146, 4148, 4151, 4152, 4163,
     4163, 4185, 4197, 4199, 4204, 4201, 4250, 4256, 4257, 4263,
     4272, 4526, 4276, 4290, 4296, 4317, 4325, 4333, 4344, 4358,
     4369, 4375, 4379, 4383, 4389, 4390, 4391, 4895, 4395, 4891,
     4527, 4907, 4934, 4922, 4403, 4405, 4418, 4939, 4965, 4423,
     4431, 4437, 4442, 4975, 4446, 4453, 4455, 4459, 4461, 4473,

     4482, 4472, 4490, 4495, 4502, 4504, 4488, 4514, 4515, 4526,
     4531, 4533, 4709, 4539, 4550, 4563, 4565, 4569, 4575, 4579,
     4590, 4592, 4614, 4615, 4627, 4632, 4640, 4962, 4646, 4963,
     4995, 4996, 4983, 4639, 4641, 4647, 4985, 5005, 4648, 4656,
     4662, 4668, 4991, 4673, 4678, 4682, 4689, 4695, 4700, 4709,
     4725, 4730, 4735, 4743, 4748, 4752, 4759, 4770, 4771, 4777,
    13085, 4781, 4782, 4787, 4791, 4793, 4794, 4813, 4815, 4820,
     4828, 4835, 4837, 4846, 4847, 5012, 4855, 4978, 5018, 5032,
     5026,13085,13085,13085, 5040, 5062,13085,13085,13085,13085,
     5046,13085,13085,13085,13085,13085,13085,13085, 4872, 4863,

    13085,13085,13085,13085,13085,13085,13085,13085,13085,13085,
    13085,13085,13085,13085,13085,13085,13085,13085,13085,13085,
    13085, 5025, 5038, 5050, 4876, 4874,    0, 5075, 4953,13085,
     5015, 5034, 4937, 5039, 5042, 4973, 5047, 5043, 4918, 5048,
     5052, 4994, 5053, 5115,13085, 5168, 5205, 5242, 5279, 5316,
     5353, 5390, 5427, 5464, 5501, 5538, 5575, 5612, 5649, 5686,
     5723, 5760, 5797, 5834, 5871, 5908, 5945, 5982, 6019, 6056,
     6093, 6130, 6167, 6197, 6220, 6240, 6266, 6288, 6314, 6350,
     6381, 6411, 6447, 6483, 6519, 6555, 6592, 6623, 6660, 6692,
     6728, 6764, 6800, 6836, 6872, 6908, 6944, 6980, 7001, 7038,

     7075, 7112, 7143, 7179, 7215, 7251, 7287, 7323, 7359, 7389,
     7410, 7447, 7468, 7505, 7542, 7563, 7600, 7637, 7673, 7705,
     7742, 7763, 7800, 7830, 7860, 7897, 7918, 7955, 7992, 8029,
     8066, 8087, 8110, 8147, 8184, 8221, 8252, 8288, 8318, 8341,
     8357, 5095, 5102, 8375, 8406, 8439, 8470, 8501, 8531, 8561,
     8597, 8633, 8670, 8706, 8736, 8773, 8804, 8835, 8872, 8909,
     8941, 8972, 9008, 9044, 9081, 9117, 9153, 9189, 9225, 9261,
     9291, 9312, 9349, 9386, 9423, 9454, 9485, 9521, 9557, 9593,
     9629, 9665, 9701, 9731, 9761, 9791, 9812, 9849, 9870, 9907,
     9944, 9974, 9995,10032,10069,10105,10137,10174,10195,10232,

    10262,10292,10322,10352,10389,10410,10447,10484,10521,10558,
     5111,10590,10613,10634,10671,10708,10745,10781,10807,10844,
    10865,10883,10915,10951, 5109,10979,11014, 5118, 5124,11050,
    11077,11108,11138,11175,11205,11236,11267,11304,11336,11368,
    11405,11441,11471,11502,11533,11569,11605,11635,11665,11695,
    11732,11762,11792,11824, 5130,11856,11877,11900,11936,11969,
    11990,12010,12042, 5133,12075,12110,12147, 6179,12183,12215,
    12243,12280,12311,12348,12380,12411,12447,12483,12513,12543,
     6185, 6212,12564,12596,12619,12640,12660,12692,12729,12761,
    12788,12825,12862,12899,12936,12973,13010,13047, 6250

    } ;

static const flex_int16_t yy_def[2000] =
    {   0,
     1746, 1746, 1745,    3, 1747, 1747, 1748, 1748, 1745,    9,
     1745,   11, 1749, 1749, 1750, 1750, 1745,   17, 1745,   19,
     1745,   21, 1751, 1751, 1752, 1752, 1753, 1753, 1745,   29,
     1745,   31, 1745,   33, 1745,   35, 1745,   37, 1754, 1754,
     1745,   41, 1755, 1755, 1745,   45, 1756, 1756, 1757, 1757,
     1758, 1758, 1745,   53, 1759, 1759, 1760, 1760, 1761, 1761,
     1762, 1762, 1745,   63, 1763, 1763, 1764, 1764, 1745,   69,
     1745,   71, 1765, 1765, 1765, 1765, 1765, 1765, 1745,   79,
     1766, 1766, 1767, 1767, 1768, 1768, 1769, 1769, 1770, 1770,
     1771, 1771, 1772, 1772, 1745, 1745, 1745, 1745, 1745, 1773,

     1774, 1775, 1775, 1776, 1745, 1777, 1778, 1779, 1778, 1745,
     1745, 1745, 1775, 1775, 1776, 1775, 1745, 1745, 1745, 1780,
     1781, 1781, 1781, 1745, 1745, 1745, 1745, 1745, 1745, 1782,
     1745, 1745, 1745, 1745, 1783, 1784, 1745, 1785, 1745, 1786,
     1745, 1745, 1787, 1788, 1788, 1745, 1788, 1745, 1745, 1789,
     1790, 1790, 1790, 1745, 1790, 1745, 1745, 1791, 1792, 1745,
     1793, 1794, 1745, 1745, 1745, 1795, 1796, 1745, 1797, 1745,
     1798, 1745, 1745, 1799, 1745, 1745, 1745, 1800, 1745, 1745,
     1745, 1801, 1745, 1745, 1745, 1802, 1803, 1803, 1803, 1745,
     1745, 1804, 1745, 1745, 1745, 1745, 1805, 1745, 1745, 1745,

     1745, 1806, 1807, 1745, 1808, 1745, 1809, 1745, 1745, 1810,
     1745, 1745, 1745, 1811, 1745, 1812, 1745, 1745, 1745, 1745,
     1813, 1745, 1814, 1745, 1815, 1745, 1745, 1745, 1745, 1816,
     1745, 1745, 1745, 1745, 1817, 1745, 1818, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1819, 1745, 1745,
     1819, 1745, 1745, 1745, 1745, 1745, 1820, 1745, 1745, 1745,
     1745, 1821, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1822, 1745, 1823, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1824, 1745, 1745, 1745, 1825, 1745,
     1826, 1745, 1745, 1745, 1745, 1745, 1745, 1827, 1745, 1828,

     1745, 1745, 1745, 1745, 1745, 1829, 1830, 1745, 1745, 1745,
     1745, 1745, 1831, 1745, 1745, 1745, 1745, 1745, 1745, 1832,
     1833, 1745, 1834, 1745, 1745, 1745, 1745, 1745, 1835, 1835,
     1745, 1745, 1836, 1745, 1745, 1745, 1745, 1745, 1837, 1837,
     1745, 1745, 1745, 1838, 1745, 1839, 1840, 1841, 1745, 1840,
     1745, 1745, 1745, 1840, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1842, 1837,  372,  372,  372,  372, 1745, 1745, 1843, 1844,
     1844, 1845, 1845, 1845, 1845, 1845, 1845, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1840, 1745, 1745, 1840,

     1840, 1745, 1745, 1846, 1745, 1847, 1848, 1847, 1745, 1745,
     1847, 1745, 1745, 1849, 1850, 1745, 1745, 1745, 1745, 1745,
     1851, 1745, 1852, 1852, 1853, 1854, 1851, 1852, 1745, 1745,
     1745, 1854, 1855, 1856, 1745, 1857, 1858, 1857, 1745, 1745,
     1857, 1859, 1859, 1860, 1860, 1859, 1745, 1861, 1862, 1861,
     1859, 1745, 1745, 1861, 1745, 1863, 1745, 1745, 1864, 1865,
     1864, 1866, 1863, 1864, 1866, 1867, 1745, 1868, 1745, 1869,
     1869, 1870, 1868, 1869, 1745, 1745, 1745, 1870, 1871, 1872,
     1745, 1745, 1745, 1873, 1745, 1745, 1745, 1745, 1874, 1745,
     1745, 1745, 1745, 1875, 1745, 1876, 1877, 1876, 1745, 1745,

     1876, 1745, 1878, 1745, 1745, 1745, 1879, 1880, 1745, 1745,
     1745, 1745, 1745, 1881, 1745, 1882, 1882, 1883, 1881, 1882,
     1745, 1745, 1745, 1883, 1884, 1885, 1886, 1745, 1745, 1745,
     1887, 1745, 1745, 1745, 1745, 1888, 1745, 1745, 1745, 1889,
     1745, 1890, 1745, 1891, 1745, 1745, 1892, 1745, 1745, 1892,
     1745, 1893, 1745, 1745, 1894, 1894, 1745, 1745, 1895, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1896, 1745, 1896, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1897, 1745, 1745, 1745,
     1898, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1899,
     1745, 1745, 1745, 1900, 1745, 1745, 1745, 1745, 1745, 1745,

     1901, 1902, 1745, 1745, 1903, 1904, 1745, 1745, 1905, 1745,
     1745, 1745, 1906, 1745, 1907, 1745, 1745, 1908, 1745, 1909,
     1745, 1745, 1745, 1745, 1910, 1911, 1745, 1912, 1913, 1914,
     1745, 1915, 1745, 1745, 1745, 1916, 1917, 1745, 1745, 1745,
     1918, 1745, 1919, 1920, 1921, 1745, 1922, 1745, 1745, 1922,
     1745, 1922, 1921, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1923, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1924, 1924, 1925, 1745,
     1926, 1918, 1918, 1745, 1745, 1745, 1918, 1927, 1918, 1928,
     1929, 1930, 1930, 1930, 1930, 1930, 1745, 1745, 1745, 1745,

     1745, 1922, 1745, 1745, 1931, 1931, 1932, 1745, 1933, 1745,
     1934, 1934, 1745, 1935, 1936, 1936, 1937, 1745, 1938, 1939,
     1939, 1940, 1941, 1745, 1942, 1745, 1943, 1745, 1745, 1745,
     1944, 1944, 1945, 1745, 1946, 1946, 1947, 1745, 1745, 1948,
     1949, 1745, 1745, 1745, 1745, 1745, 1745, 1950, 1950, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1951,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1952, 1745, 1953, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1954, 1745, 1745, 1955, 1745, 1745, 1956,
     1957, 1958, 1745, 1745, 1745, 1745, 1745, 1959, 1745, 1960,

     1961, 1962, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1963, 1963, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1964, 1965, 1745, 1959, 1959, 1959, 1966,
     1967, 1959, 1968, 1969, 1969, 1969, 1969, 1969, 1745, 1745,
     1970, 1971, 1745, 1745, 1972, 1745, 1972, 1745, 1973, 1974,
     1974, 1975, 1745, 1745, 1745, 1745, 1745, 1976, 1745, 1977,
     1978, 1745, 1745, 1979, 1745, 1745, 1745, 1745, 1745, 1745,
     1980, 1980, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,

     1745, 1981, 1982, 1983, 1745, 1745, 1984, 1985, 1745, 1745,
     1745, 1959, 1745, 1745, 1986, 1987, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1988, 1745, 1745, 1745,
     1745, 1745, 1959, 1959, 1959, 1745, 1745, 1959, 1969, 1969,
     1969, 1969, 1969, 1745, 1971, 1745, 1745, 1745, 1973, 1975,
     1745, 1745, 1745, 1745, 1976, 1745, 1978, 1978, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1980, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1989, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,

     1745, 1990, 1991, 1983, 1745, 1745, 1984, 1745, 1745, 1745,
     1959, 1745, 1986, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1992, 1745, 1745, 1988, 1988, 1745, 1745, 1959, 1959, 1959,
     1745, 1959, 1969, 1969, 1969, 1969, 1969, 1971, 1745, 1745,
     1745, 1973, 1975, 1745, 1745, 1745, 1745, 1976, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1980, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1993, 1994,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1990, 1991,

     1745, 1745, 1745, 1745, 1745, 1959, 1745, 1745, 1745, 1745,
     1745, 1745, 1992, 1992, 1745, 1745, 1745, 1959, 1959, 1959,
     1959, 1969, 1969, 1969, 1969, 1969, 1971, 1745, 1745, 1745,
     1973, 1975, 1745, 1745, 1745, 1745, 1976, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1980, 1745, 1745, 1745, 1745,
     1745, 1995, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1996, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1959, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1959, 1959,

     1959, 1745, 1969, 1969, 1969, 1969, 1971, 1745, 1745, 1745,
     1973, 1975, 1745, 1745, 1745, 1745, 1976, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1980, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1959, 1745, 1745, 1745, 1745, 1745, 1997,
     1745, 1998, 1745, 1745, 1745, 1959, 1959, 1959, 1745, 1969,
     1969, 1969, 1969, 1971, 1745, 1745, 1745, 1973, 1975, 1745,
     1745, 1745, 1745, 1976, 1745, 1745, 1745, 1745, 1745, 1745,

     1745, 1745, 1980, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1959, 1745,
     1745, 1745, 1745, 1997, 1997, 1998, 1998, 1959, 1959, 1959,
     1969, 1969, 1969, 1969, 1971, 1745, 1745, 1745, 1973, 1975,
     1745, 1745, 1745, 1745, 1976, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1980, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,

     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1959, 1745,
     1959, 1959, 1959, 1969, 1969, 1969, 1969, 1971, 1745, 1745,
     1745, 1973, 1975, 1745, 1745, 1745, 1745, 1976, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1980, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1959, 1745,
     1959, 1959, 1959, 1969, 1969, 1969, 1969, 1971, 1745, 1745,
     1745, 1973, 1975, 1745, 1745, 1745, 1745, 1976, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1980, 1745, 1745, 1745,

     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1959, 1745, 1959, 1745, 1959, 1969,
     1969, 1969, 1971, 1745, 1745, 1745, 1973, 1975, 1745, 1745,
     1745, 1745, 1976, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1980, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1959, 1745, 1959,
     1745, 1969, 1969, 1971, 1745, 1745, 1745, 1973, 1975, 1745,
     1745, 1745, 1745, 1976, 1745, 1745, 1745, 1745, 1745, 1745,

     1745, 1745, 1980, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1959, 1745, 1959,
     1969, 1969, 1971, 1745, 1745, 1745, 1973, 1975, 1745, 1745,
     1745, 1745, 1976, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1980, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1959, 1745, 1959, 1969, 1969,
     1971, 1745, 1745, 1745, 1973, 1975, 1745, 1745, 1745, 1745,
     1976, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1980,

     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1959, 1745, 1745, 1999, 1745, 1980, 1745, 1999, 1745,
     1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999,
     1999, 1999, 1999, 1999,    0, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,

     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,

     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745

    } ;

static const flex_int16_t yy_nxt[13170] =
    {   0,
       97,   98,   99,   97,   98,   97,  100,   97,  101,   97,
       97,   97,   97,   97,   97,  102,   97,  103,  104,   97,
      102,  102,  102,   97,   97,  105,   97,   97,   97,  106,
      107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
      107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
      107,   97,  108,   97,  109,  107,  107,  107,  107,  107,
      107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
      107,  107,  107,  107,  107,  107,  107,  107,   97,   97,
       97,   97,   97,  110,  111,  125,  125,  111,  177,  177,
      181,  181,  178,  178,  182,  182,  217,  112,  113,  217,

      114,  115,  224,  224,  116,  116,  117,  245,  245,  268,
      268,  281,  126,  126,  225,  225,  330, 1382, 1383,  233,
      234,  330,  233,  258,  235,  259,  331,  332,  281,  226,
      226,  331,  332,  562,  349,  127,  127,  563,  179,  179,
      183,  183,  233,  234,  350,  233,  218,  235,  395,  218,
      260,  395,  227,  227, 1384,  622,  348,  246,  246,  269,
      269,  282,  117,  118,  118,  119,  118,  118,  118,  120,
      236,  118,  118,  261,  118,  118,  118,  118,  282,  118,
      622,  118,  122,  238,  292,  239,  122,  118,  118,  118,
      118,  118,  412,  236,  412,  240,  432,  432,  432,  432,

      241,  254,  255,  395,  254,  238,  395,  239,  415,  567,
      242,  293,  567,  416,  118,  123,  118,  240,  417,  418,
      568,  417,  241,  254,  255,  578,  254,  341,  342,  579,
      341,  348,  242,  243,  293,  258,  646,  259,  263,  646,
      264,  118,  118,  118,  118,  118,  118,  119,  118,  118,
      118,  120,  256,  118,  118,  243,  118,  118,  118,  118,
      292,  118,  260,  118,  122,  265,  275,  292,  122,  118,
      118,  118,  118,  118,  256,  655,  276,  277,  343,  351,
      419,  347,  352,  347,  353,  261,  602,  293,  266,  352,
      352,  603, 1385,  278,  294,  348,  118,  123,  118,  758,

      400,  759,  401,  401,  401,  465,  465,  465,  465,  656,
      293,  348,  478,  478,  478,  478,  279,  294,  355,  524,
      524,  524,  524,  118,  118,  118,  118,  128,  128,  129,
      128,  128,  128,  128,  128,  130,  128,  128,  128,  128,
      128,  128,  128,  128,  128,  128,  128,  128,  128,  128,
      128,  128,  128,  128,  128,  128,  128,  130,  130,  130,
      130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
      130,  130,  130,  130,  130,  130,  130,  130,  128,  131,
      128,  130,  130,  130,  130,  130,  130,  130,  130,  130,
      130,  130,  130,  130,  130,  130,  130,  130,  130,  130,

      130,  130,  130,  130,  130,  128,  128,  128,  128,  130,
      130,  132,  133,  134,  133,  133,  132,  132,  132,  135,
      132,  132,  132,  132,  132,  132,  132,  132,  132,  136,
      132,  132,  132,  132,  137,  132,  132,  132,  132,  132,
      132,  138,  138,  138,  138,  138,  138,  138,  138,  138,
      138,  138,  138,  138,  138,  138,  138,  138,  138,  138,
      138,  138,  132,  139,  132,  138,  138,  138,  138,  138,
      138,  138,  138,  138,  138,  138,  138,  138,  138,  138,
      138,  138,  138,  138,  138,  138,  138,  138,  138,  132,
      132,  132,  140,  138,  138,  141,  141,  142,  141,  141,

      141,  143,  292,  141,  141,  275,  141,  141,  141,  141,
      263,  141,  264,  141,  145,  276,  277,  292,  145,  141,
      146,  141,  141,  141,  578,  412,  606,  412,  580,  294,
      502,  607,  278,  502,  292,  407,  408,  265, 1745,  408,
      408,  623,  301,  408,  295,  504,  141,  147,  141,  301,
      429,  430,  294,  429,  747,  279,  647,  302,  543,  338,
      266,  295,  338,  413,  302,  551,  623,  295,  348,  408,
      544,  778,  408,  141,  141,  141,  141,  141,  141,  142,
      141,  141,  141,  143,  295,  141,  141,  339,  141,  141,
      141,  141,  303,  141,  314,  141,  145,  314,  779,  303,

      145,  141,  146,  141,  141,  141,  315,  668,  545,  315,
      340, 1198,  431,  627,  475,  476,  324,  475,  678,  402,
      554,  316,  402,  554,  316,  555,  325,  326,  141,  147,
      141,  626,  668,  654, 1386,  403,  654, 1745, 1198,  679,
     1745,  394,  324,  327,  317,  437,  438,  317, 1745,  667,
      438,  395,  325,  326,  395,  141,  141,  141,  141,  148,
      148,  149,  148,  148,  148,  150,  328,  148,  148,  327,
      148,  148,  148,  148,  667,  148,  477,  148,  152,  438,
      334,  673,  152,  148,  153,  148,  154,  148,  335, 1745,
      438, 1387,  328,  347,  438,  347,  347,  394,  347,  347,

      347,  481,  482,  335,  481,  335,  673,  348,  718,  674,
      148,  155,  148,  661,  661,  661,  661,  398,  399,  347,
      398,  347,  347,  438,  347,  347,  347, 1388,  760,  446,
      336,  337,  381,  348,  674,  761,  675,  148,  148,  148,
      148,  148,  148,  149,  148,  148,  148,  150,  334,  148,
      148, 1389,  148,  148,  148,  148,  335,  148,  381,  148,
      152,  675, 1390,  483,  152,  148,  153,  148,  154,  148,
     1391,  335,  667,  335,  420,  420,  420,  420,  420,  420,
      420,  420,  763,  415,  420,  420,  420,  420,  416,  767,
      765,  421,  148,  155,  148,  421,  422,  667,  336,  337,

      422,  421,  395,  582,  766,  395,  422,  583,  425,  398,
      399, 1392,  398,  584,  698,  585,  699,  699,  699,  148,
      148,  148,  148,  132,  156,  157,  156,  156,  132,  132,
      132,  158,  132,  132,  132,  132,  132,  132,  132,  132,
      132,  159,  132,  132,  132,  132,  160,  132,  132,  132,
      132,  132,  132,  161,  161,  161,  161,  161,  161,  161,
      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
      161,  161,  161,  161,  132,  139,  132,  161,  161,  161,
      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
      161,  161,  161,  161,  161,  161,  161,  161,  161,  161,

      161,  132,  132,  132,  162,  161,  161,  163,  164,  165,
      164,  164,  163,  163,  163,  166,  163,  163,  163,  163,
      163,  163,  163,  163,  163,  167,  163,  163,  163,  163,
      168,  163,  163,  163,  163,  163,  163,  169,  169,  169,
      169,  169,  169,  169,  169,  169,  169,  169,  169,  169,
      169,  169,  169,  169,  169,  169,  169,  169,  163,  170,
      163,  169,  169,  169,  169,  169,  169,  169,  169,  169,
      169,  169,  169,  169,  169,  169,  169,  169,  169,  169,
      169,  169,  169,  169,  169,  163,  163,  163,  171,  169,
      169,  172,  172,  173,  172,  172,  172,  172,  172,  172,

      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
      172,  172,  172,  172,  172,  172,  172,  172,  172,  172,
      172,  174,  174,  174,  174,  174,  174,  174,  174,  174,
      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
      174,  174,  172,  175,  172,  174,  174,  174,  174,  174,
      174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
      174,  174,  174,  174,  174,  174,  174,  174,  174,  172,
      172,  172,  172,  174,  174,  184,  184,  185,  184,  184,
      184,  186,  502,  184,  184,  502,  184,  184,  184,  184,
     1393,  184,  704,  184,  188,  704,  447,  504,  188,  184,

      184,  184,  184,  184,  724,  497,  498,  724,  449,  450,
      498,  409,  410,  450,  409,  460,  389,  447,  396,  389,
      348,  396,  646,  667,  349,  646,  184,  189,  184,  390,
      390,  582,  391,  392,  397,  586,  393,  393,  394,  498,
      394,  584,  450,  585,  339,  822,  348,  667,  822,  486,
      487, 1394,  486,  184,  184,  184,  184,  184,  184,  185,
      184,  184,  184,  186, 1151,  184,  184,  340,  184,  184,
      184,  184,  667,  184, 1745,  184,  188, 1395,  789, 1152,
      188,  184,  184,  184,  184,  184, 1745,  450, 1745,  498,
      791,  450, 1087,  498,  394, 1745,  394,  455,  455,  455,

      455,  455,  455,  455,  455,  781, 1088,  602,  184,  189,
      184,  488,  603,  400,  456,  401,  401,  401,  456,  457,
      450,  789,  498,  457,  348,  417,  418,  782,  417,  712,
      712,  712,  712,  791, 1396,  184,  184,  184,  184,  190,
      190,  191,  190,  190,  190,  190,  190,  192,  190,  190,
      190,  190,  190,  190,  190,  193,  190,  190,  190,  190,
      190,  190,  190,  190,  190,  190,  190,  190,  190,  192,
      192,  192,  192,  192,  192,  192,  192,  192,  192,  192,
      192,  192,  192,  192,  192,  192,  192,  192,  192,  192,
      190,  194,  190,  192,  192,  192,  192,  192,  192,  192,

      192,  192,  192,  192,  192,  192,  192,  192,  192,  192,
      192,  192,  192,  192,  192,  192,  192,  190,  190,  190,
      190,  192,  192,  195,  195,  196,  195,  195,  195,  195,
      195,  197,  195,  195,  195,  195,  195,  195,  195,  195,
      195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
      195,  195,  195,  197,  197,  197,  197,  197,  197,  197,
      197,  197,  197,  197,  197,  197,  197,  197,  197,  197,
      197,  197,  197,  197,  195,  198,  195,  197,  197,  197,
      197,  197,  197,  197,  197,  197,  197,  197,  197,  197,
      197,  197,  197,  197,  197,  197,  197,  197,  197,  197,

      197,  195,  195,  195,  195,  197,  197,  199,  200,  201,
      200,  200,  199,  199,  199,  202,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  203,  199,  199,  199,  199,
      204,  199,  199,  199,  199,  199,  199,  205,  205,  205,
      205,  205,  205,  205,  205,  205,  205,  205,  205,  205,
      205,  205,  205,  205,  205,  205,  205,  205,  199,  206,
      199,  205,  205,  205,  205,  205,  205,  205,  205,  205,
      205,  205,  205,  205,  205,  205,  205,  205,  205,  205,
      205,  205,  205,  205,  205,  199,  199,  199,  207,  205,
      205,  208,  208,  209,  208,  208,  208,  208,  208,  210,

      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
      208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
      208,  210,  210,  210,  210,  210,  210,  210,  210,  210,
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
      210,  210,  208,  211,  208,  210,  210,  210,  210,  210,
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
      210,  210,  210,  210,  210,  210,  210,  210,  210,  208,
      208,  208,  208,  210,  210,  212,  212,  213,  212,  212,
      212,  212,  212,  212,  212,  212,  212,  212,  212,  212,
      212,  212,  212,  212,  212,  212,  212,  212,  212,  212,

      212,  212,  212,  212,  212,  214,  214,  214,  214,  214,
      214,  214,  214,  214,  214,  214,  214,  214,  214,  214,
      214,  214,  214,  214,  214,  214,  212,  215,  212,  214,
      214,  214,  214,  214,  214,  214,  214,  214,  214,  214,
      214,  214,  214,  214,  214,  214,  214,  214,  214,  214,
      214,  214,  214,  212,  212,  212,  212,  214,  214,  219,
      219,  220,  219,  219,  219,  219,  219,  219,  219,  219,
      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
      219,  219,  219,  219,  219,  219,  219,  219,  219,  221,
      221,  221,  221,  221,  221,  221,  221,  221,  221,  221,

      221,  221,  221,  221,  221,  221,  221,  221,  221,  221,
      219,  222,  219,  221,  221,  221,  221,  221,  221,  221,
      221,  221,  221,  221,  221,  221,  221,  221,  221,  221,
      221,  221,  221,  221,  221,  221,  221,  219,  219,  219,
      219,  221,  221,  228,  228,  229,  228,  228,  228,  228,
      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
      228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
      228,  228,  228,  230,  230,  230,  230,  230,  230,  230,
      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
      230,  230,  230,  230,  228,  231,  228,  230,  230,  230,

      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
      230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
      230,  228,  228,  228,  228,  230,  230,  247,  248,  249,
      247,  248,  247,  247,  247,  247,  247,  247,  247,  250,
      247,  247,  247,  247,  251,  251,  247,  251,  251,  251,
      247,  247,  247,  247,  247,  247,  247,  251,  251,  251,
      251,  251,  251,  251,  251,  251,  251,  251,  251,  251,
      251,  251,  251,  251,  251,  251,  251,  251,  247,  252,
      247,  251,  251,  251,  251,  251,  251,  251,  251,  251,
      251,  251,  251,  251,  251,  251,  251,  251,  251,  251,

      251,  251,  251,  251,  251,  247,  247,  247,  247,  247,
      247,  270,  270,  271,  270,  270,  270,  270,  270,  270,
      270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
      270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
      270,  272,  272,  272,  272,  272,  272,  272,  272,  272,
      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
      272,  272,  270,  273,  270,  272,  272,  272,  272,  272,
      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
      272,  272,  272,  272,  272,  272,  272,  272,  272,  270,
      270,  270,  270,  272,  272,  283,  283,  284,  283,  283,

      283,  283,  283,  285,  283,  283,  283,  283,  283,  283,
      283,  283,  283,  283,  283,  283,  283,  283,  283,  283,
      283,  283,  283,  283,  283,  285,  285,  285,  285,  285,
      285,  285,  285,  285,  285,  285,  285,  285,  285,  285,
      285,  285,  285,  285,  285,  285,  283,  286,  283,  285,
      285,  285,  285,  285,  285,  285,  285,  285,  285,  285,
      285,  285,  285,  285,  285,  285,  285,  285,  285,  285,
      285,  285,  285,  283,  283,  283,  283,  285,  285,  287,
      287,  288,  287,  287,  287,  287,  287,  289,  287,  287,
      287,  287,  287,  287,  287,  287,  287,  287,  287,  287,

      287,  287,  287,  287,  287,  287,  287,  287,  287,  289,
      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
      287,  290,  287,  289,  289,  289,  289,  289,  289,  289,
      289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
      289,  289,  289,  289,  289,  289,  289,  287,  287,  287,
      287,  289,  289,  296,  296,  297,  296,  296,  296,  296,
      296,  296,  296,  296,  296,  296,  296,  296,  296,  296,
      296,  296,  296,  296,  296,  296,  296,  296,  296,  296,
      296,  296,  296,  298,  298,  298,  298,  298,  298,  298,

      298,  298,  298,  298,  298,  298,  298,  298,  298,  298,
      298,  298,  298,  298,  296,  299,  296,  298,  298,  298,
      298,  298,  298,  298,  298,  298,  298,  298,  298,  298,
      298,  298,  298,  298,  298,  298,  298,  298,  298,  298,
      298,  296,  296,  296,  296,  298,  298,  305,  305,  706,
      785,  306,  306,  706, 1397,  567,  307,  307,  567,  467,
      467,  467,  467, 1398,  308,  308,  568, 1082,  427,  427,
      427,  427,  309,  309, 1083,  785,  468,  463,  463,  463,
      463,  469,  706,  310,  310,  421,  606,  311,  311,  451,
      422,  607, 1745,  680,  456, 1745,  680,  312,  312,  457,

     1399, 1745,  450, 1745,  429,  430,  450,  429,  310,  310,
      447, 1400,  311,  311,  318,  318,  319,  318,  318,  318,
      320,  318,  318,  318,  318,  318,  318,  318,  318,  318,
      318,  554,  318,  318,  554,  450,  555,  318,  318,  318,
      318,  318,  680,  318,  691,  680,  396,  704,  426,  396,
      704,  415,  420,  420,  420,  420,  416,  462,  467,  467,
      467,  467,  697, 1269, 1401,  318,  322,  318,  394,  421,
      681,  424,  424,  424,  422,  468,  425,  602,  439,  440,
      469,  439,  603,  680,  491,  492,  680,  491,  573,  574,
     1269,  573,  318,  318,  318,  318,  318,  318,  319,  318,

      318,  318,  320,  318,  318,  318,  318,  318,  318,  318,
      318,  318,  318,  606,  318,  318,  806, 1402,  607,  318,
      318,  318,  318,  318,  394,  318, 1403, 1404,  398,  399,
      807,  398,  426,  447,  691,  409,  410, 1405,  409,  575,
      351,  806,  347,  352,  347,  353,  493,  318,  322,  318,
      352,  352, 1745,  408,  447,  807,  348,  408,  716,  692,
      681,  789,  716,  439,  440, 1406,  439,  510,  511,  502,
      510, 1407,  502,  791,  318,  318,  318,  318,  356,  355,
     1745,  438,  808,  809,  504,  438,  408,  458,  455,  455,
      458,  716,  357,  521,  522, 1408,  521,  411,  460,  432,

      432,  432,  432,  358,  456,  359,  360,  808,  809,  457,
      361,  362,  528,  529,  438,  528,  363,  364,  365,  366,
      367,  368, 1066,  533,  534,  441,  533,  543,  358,  512,
      359,  360,  407,  408,  810,  361,  362,  408, 1067,  544,
      789,  363,  364,  365,  366,  367,  368,  369,  369,  369,
      369, 1410,  791,  452,  453,  523,  452,  370, 1745,  810,
     1271,  458,  455,  455,  458,  369,  408,  369, 1273,  371,
     1745,  450,  460,  680,  530,  450,  680,  545,  456, 1745,
      461,  461,  461,  457, 1419,  535,  467,  467,  467,  467,
      537,  538,  371,  537,  341,  342,  373,  341,  704,  374,

      375,  704, 1420,  468,  450,  471,  471,  471,  469,  452,
      453,  376,  452,  341,  342,  454,  341, 1421,  377, 1424,
      378,  379,  369,  369,  369,  369,  467,  467,  467,  467,
      564,  565,  370,  564,  473,  473,  473,  473, 1425,  798,
      369,  462,  369,  468,  371,  343,  475,  476,  469,  475,
      681,  468,  539,  902, 1745,  408,  469, 1426,  903,  408,
      506,  506,  506,  506,  343,  811,  472,  371, 1427,  570,
      571,  383,  570,  669,  384,  385,  669, 1429,  386,  508,
      508,  508,  509,  684,  407,  408,  387,  685,  408,  408,
      811, 1430,  566,  377,  812,  378,  379,  442,  442,  670,

      442,  442,  442,  443,  900,  442,  442,  900,  442,  442,
      442,  442, 1431,  442,  472,  442,  445, 1432,  408,  812,
      445,  442,  442,  442,  446,  442,  686, 1433, 1434,  499,
      500,  572,  499,  707,  813,  513,  513,  513,  513,  513,
      513,  513,  513,  687, 1435, 1436, 1745,  498,  442,  445,
      442,  498,  514,  688, 1437,  724,  514,  515,  724,  813,
     1438,  515,  513,  513,  513,  513,  460, 1439,  519,  519,
      519,  519, 1440,  667, 1441,  442,  442,  442,  442,  514,
      498,  517,  517,  517,  515,  514,  513,  513,  513,  513,
      515,  501,  546,  546,  546,  546,  587,  588,  667,  587,

     1442,  591,  592,  514,  591,  667,  338,  665,  515,  338,
      546,  666,  546,  667,  547,  595,  596, 1443,  595,  598,
      599, 1152,  598,  633,  634,  669,  633,  662,  669,  721,
      667,  663,  665,  721,  339,  816,  666,  547,  667,  817,
      664, 1152,  518,  432,  432,  432,  432,  680,  518, 1444,
      680,  670,  662,  818,  671,  819,  663,  340,  589, 1445,
      816, 1152,  721,  593,  817,  664,  546,  548,  549,  672,
      548,  657, 1446,  546,  546,  546,  546,  597,  818,  671,
      819,  600,  658,  659,  660,  635,  680,  481,  482,  680,
      481,  546, 1447,  546,  672,  547,  657,  347,  691,  347,

      347,  820,  347,  347,  347,  437,  438,  658,  659,  660,
      438,  348,  724,  693,  347,  724,  347,  347,  550,  347,
      347,  347,  680,  460,  681,  680,  820,  680,  348,  551,
      680, 1448,  486,  487,  684,  486,  381,  691,  685,  438,
      402,  815,  396,  402,  815,  396, 1449,  546,  369,  369,
      369,  369,  695,  381, 1745,  438,  403,  732,  403,  438,
     1450,  732,  394,  681,  394, 1451,  369,  670,  369,  402,
      640,  680,  402,  691,  680, 1453,  402,  686,  691,  402,
      700,  701, 1454,  700,  622,  403, 1455, 1456,  438,  696,
      732,  394,  697,  640,  694, 1457,  702,  373,  394,  681,

      374,  375,  703,  823,  688, 1458,  437,  438,  348,  622,
      917,  438,  376,  917,  389, 1459, 1460,  389,  394,  377,
      394,  378,  379,  369,  369,  369,  369,  390,  390,  887,
      391,  392,  887, 1461,  393,  393,  394, 1462, 1463,  827,
      438,  369,  339,  369,  919,  640,  823,  394,  681,  420,
      420,  420,  420,  920,  394,  717,  491,  492,  703,  491,
      420,  420,  420,  420, 1464,  340,  421,  815,  640,  919,
      815,  422,  373,  823, 1465,  374,  375,  421,  920,  641,
      499,  500,  422,  499,  425, 1466, 1467,  376,  465,  465,
      465,  465,  394,  670,  377,  888,  378,  379,  648,  510,

      511,  648,  510,  648,  648,  648,  648,  648,  648,  648,
      648,  649,  648,  650,  648,  650,  651,  648,  652,  652,
      652,  648,  648,  648,  648,  648,  648,  653,  652,  652,
      652,  652,  652,  652,  652,  652,  652,  652,  652,  652,
      652,  652,  652,  652,  652,  652,  652,  652,  652,  648,
      648,  648,  652,  652,  652,  652,  652,  652,  652,  652,
      652,  652,  652,  652,  652,  652,  652,  652,  652,  652,
      652,  652,  652,  652,  652,  652,  648,  648,  648,  648,
      648,  648,  680,  521,  522,  680,  521,  921, 1745, 1745,
     1745, 1745,  427,  427,  427,  427,  420,  420,  420,  420,

      427,  427,  427,  427,  528,  529, 1745,  528, 1745,  421,
     1745, 1468,  921,  421,  422, 1470,  822,  421,  422,  822,
      425, 1479,  422,  420,  420,  420,  420,  533,  534,  447,
      533, 1745, 1480, 1745,  455,  455,  455,  455, 1481, 1484,
      421,  449,  450, 1745,  450,  422,  450,  425,  450, 1485,
      447,  456, 1745, 1486,  922, 1487,  457,  447,  923,  681,
     1489, 1745, 1745,  465,  465,  465,  465, 1490,  680,  449,
      450,  680,  426,  924,  450,  450,  925,  450,  447,  922,
      426,  442,  442,  923,  442,  442,  442,  718,  932,  442,
      442,  932,  442,  442,  442,  442, 1491,  442,  924,  719,

      445,  925, 1492,  450,  445,  442,  442,  442,  446,  442,
     1279, 1279, 1279,  463,  463,  463,  463, 1493,  722,  691,
      458,  455,  455,  458,  467,  467,  467,  467, 1494, 1495,
      456,  460,  442,  445,  442,  457,  834,  456, 1496,  497,
      498,  468,  457, 1497,  498,  681,  469, 1498,  463,  463,
      463,  463,  478,  478,  478,  478, 1499, 1500,  926,  442,
      442,  442,  442,  442,  442,  456,  442,  442,  442,  718,
      457,  442,  442,  498,  442,  442,  442,  442, 1501,  442,
     1152,  442,  445,  926, 1502, 1152,  445,  442,  442,  442,
      442,  442, 1152,  462, 1503,  458,  455,  455,  458, 1504,

     1505,  667,  458,  455,  455,  458,  460,  478,  478,  478,
      478, 1506,  456,  460,  442,  445,  442,  457, 1507,  456,
     1745,  498, 1508, 1510,  457,  498,  667,  929,  462,  458,
      455,  455,  458,  473,  473,  473,  473, 1511, 1512, 1513,
      460,  442,  442,  442,  442,  698,  456,  699,  699,  699,
      468,  457,  929, 1514,  498,  469,  467,  467,  467,  467,
      467,  467,  467,  467,  473,  473,  473,  473,  467,  467,
      467,  467, 1515,  468,  497,  498, 1516,  468,  469,  498,
      900,  468,  469,  900,  932,  468,  469,  932,  537,  538,
      469,  537,  506,  506,  506,  506,  506,  506,  506,  506,

      506,  506,  506,  506,  524,  524,  524,  524,  498,  513,
      513,  513,  513,  472,  509,  736,  736,  736,  509,  508,
      508,  508,  509,  733, 1517, 1518,  514,  524,  524,  524,
      524,  515,  519,  519,  519,  519,  513,  513,  513,  513,
      513,  513,  513,  513,  472,  548,  549,  680,  548,  514,
      680, 1519,  680,  514,  515,  680,  680,  514,  515,  680,
     1520,  930,  515,  519,  519,  519,  519,  513,  513,  513,
      513,  564,  565, 1521,  564,  570,  571,  351,  570,  347,
      514,  347,  916, 1522,  514,  515,  930,  573,  574,  515,
      573,  587,  588,  348,  587,  591,  592, 1523,  591,  595,

      596,  931,  595,  598,  599, 1524,  598,  633,  634,  828,
      633, 1015,  518,  661,  661,  661,  661, 1017,  912,  845,
      845,  845,  845, 1018,  681,  829,  931, 1526, 1070,  681,
      351, 1071,  347,  681,  347,  916, 1015, 1170,  575, 1534,
     1170, 1535, 1017,  518,  648,  846,  348,  648, 1018,  648,
      648,  648,  648,  648,  648,  648,  648,  649,  648,  650,
      648,  650,  802,  648,  652,  652,  652,  648,  648,  648,
      648,  648,  648,  653,  652,  652,  652,  652,  652,  652,
      652,  652,  652,  652,  652,  652,  652,  652,  652,  652,
      652,  652,  652,  652,  652,  648,  803,  648,  652,  652,

      652,  652,  652,  652,  652,  652,  652,  652,  652,  652,
      652,  652,  652,  652,  652,  652,  652,  652,  652,  652,
      652,  652,  648,  648,  648,  648,  648,  648,  822,  407,
      706,  822, 1536,  680,  706,  823,  680, 1539, 1745,  706,
     1019, 1322,  927,  706, 1322,  927, 1540,  680,  700,  701,
      680,  700,  437,  716, 1541, 1542, 1544,  716, 1020,  700,
      701, 1545,  700,  706,  839, 1019,  700,  701,  928,  700,
      703,  680,  706, 1546,  680,  840,  680,  680,  823,  680,
      680,  703,  841, 1020, 1547, 1548,  716,  680,  703, 1452,
      680, 1549, 1452, 1550,  348, 1745,  716, 1551,  691, 1552,

      716, 1553,  832, 1554,  835,  823,  830,  830, 1555,  830,
      681,  830,  830,  830,  830,  830,  830,  830,  830,  830,
      830,  830,  691,  830,  681,  830,  703,  691,  691,  716,
      830,  830,  830,  830,  830,  830, 1556,  703,  407,  408,
      836,  933,  680,  408,  703,  680,  838,  837,  681,  700,
      701, 1023,  700,  681,  681, 1152, 1557,  830,  830,  830,
     1509,  437,  438, 1509,  681,  840,  438,  847,  847,  847,
      847,  703,  408,  497,  732, 1026, 1023, 1558,  732,  845,
      845,  845,  845, 1027,  830,  830,  826,  830,  830,  830,
     1559,  680,  842,  846,  680,  438,  667,  447, 1560, 1745,

     1026, 1745,  732, 1561,  934,  846,  732,  732, 1027,  449,
      721, 1745,  721, 1109,  721,  849,  721, 1563,  447,  681,
     1745,  667, 1564,  680, 1565, 1110,  680,  703,  442,  442,
     1566,  442,  442,  442,  718,  732,  442,  442, 1109,  442,
      442,  442,  442,  721,  442,  721,  442,  851,  447, 1011,
     1110,  851,  442,  442,  442,  442,  442,  497,  498, 1567,
      449,  450,  498,  680, 1562,  450,  680, 1562,  681,  447,
      860,  860,  860,  860,  691, 1568, 1569,  939, 1570,  442,
      851,  442,  506,  506,  506,  506,  680,  680, 1571,  680,
      680,  498,  509, 1572,  450, 1573,  506,  506,  506,  506,

      681,  736,  736,  736,  509, 1111,  442,  442,  442,  442,
      680,  858, 1112,  680,  852,  736,  736,  736,  509,  935,
      680, 1574, 1575,  680,  680, 1576,  680,  680,  680,  680,
     1111,  680, 1577,  847,  847,  847,  847, 1112,  691, 1579,
      681,  830,  830,  941,  830, 1585,  830,  830,  830,  830,
      830,  830,  830,  830,  830,  830,  830,  938,  830,  846,
      830,  691, 1586,  681,  681,  830,  830,  830,  830,  830,
      830,  691,  940, 1021, 1025,  691, 1021, 1025,  942, 1587,
      700,  701,  932,  700, 1030,  932, 1590,  681,  700,  701,
     1591,  700,  830,  830,  830,  943,  839,  681, 1028, 1022,

      928,  681,  703,  681,  944,  681, 1592,  667,  407,  408,
      703,  700,  701,  408,  700,  860,  860,  860,  860,  830,
      830,  937,  830,  830,  830, 1114, 1593,  841, 1114,  437,
      438,  447,  667,  703,  438,  497,  498,  509, 1025,  348,
      498, 1025,  408,  449,  450,  407,  408, 1595,  450,  945,
      408, 1022,  447,  506,  506,  506,  506,  680,  703, 1031,
      680, 1115, 1528,  438,  928, 1528,  703, 1596,  680,  498,
      949,  680,  958,  958,  958,  509,  955,  450,  680,  408,
      680,  680,  680,  680,  950,  680, 1115,  437,  438,  703,
      442,  442,  438,  442,  442,  442,  718, 1038,  442,  442,

     1116,  442,  442,  442,  442, 1597,  442, 1598,  719,  851,
     1599, 1600, 1117,  851,  442,  442,  442,  446,  442,  971,
      972,  438, 1601, 1029,  973, 1116, 1602,  974,  975,  691,
     1032,  691,  976,  691,  681,  977,  978, 1117,  979, 1042,
     1035,  442,  851,  442,  680,  681, 1034,  680, 1033, 1192,
      680,  680, 1603,  680,  680,  681, 1604,  681, 1605,  681,
      497,  498, 1193, 1606, 1194,  498, 1607, 1195,  442,  442,
      442,  442,  442,  442, 1192,  442,  442,  442,  718,  680,
      442,  442,  680,  442,  442,  442,  442, 1193,  442, 1194,
      442,  851, 1195, 1196,  498,  851,  442,  442,  442,  442,

      442,  691,  691,  680,  700,  701,  680,  700,  680, 1608,
     1197,  680, 1048, 1037, 1118, 1609, 1610,  447, 1196, 1036,
      839,  681, 1611,  442,  851,  442,  703,  681,  681,  449,
      450, 1612, 1120,  680,  450, 1197,  680, 1267,  447,  506,
      506,  506,  506, 1613, 1268,  506,  506,  506,  506, 1614,
      442,  442,  442,  442,  680, 1615,  681,  680,  958,  958,
      958,  509, 1267,  450,  958,  958,  958,  509,  680, 1268,
      680,  680, 1106,  680,  680,  680, 1616,  680,  680, 1119,
      681, 1043,  703,  447, 1617,  681,  407,  408,  437,  438,
     1121,  408, 1618,  438,  680,  449,  450,  680,  680,  680,

      450,  680,  680, 1619,  447,  691,  680,  497,  498,  680,
      681, 1202,  498,  680, 1202,  680,  680, 1620,  680,  691,
      408,  691,  438, 1124, 1122,  691,  691, 1114, 1621,  450,
     1114,  681, 1126,  680, 1622, 1127,  680, 1131, 1623, 1123,
     1125,  498, 1624,  680, 1132,  681,  680,  681, 1625, 1626,
     1627,  681,  681, 1022, 1629, 1202, 1137, 1200, 1202, 1634,
     1189, 1635,  407,  408,  691,  680,  691,  408,  680,  680,
     1199,  681,  680, 1201, 1636,  681,  681, 1270, 1272, 1639,
     1270, 1272, 1205,  681,  691, 1203,  680, 1640,  681,  680,
      681, 1204,  681, 1641,  691,  447,  408, 1206, 1642, 1207,

      437,  438, 1644, 1271, 1273,  438,  691,  449,  450, 1645,
      681, 1646,  450,  497,  498, 1647,  447, 1648,  498, 1264,
      681,  680,  680,  680,  680,  680,  680, 1562, 1581, 1649,
     1562, 1581,  681, 1202,  438, 1276, 1202, 1211, 1650, 1651,
      680,  450,  681,  680, 1212,  680,  681,  498,  680, 1652,
     1217, 1653, 1279, 1279, 1279, 1277,  407,  408, 1654,  680,
     1655,  408,  680,  681,  447, 1152,  680,  437,  438,  680,
     1656, 1657,  438,  691,  691,  680,  449,  450,  680,  497,
      498,  450, 1658,  680,  498,  447,  680, 1659, 1280, 1660,
      408,  691, 1281, 1278, 1345, 1662,  691, 1345,  681,  681,

      681,  438, 1347, 1284,  680, 1347, 1663,  680,  680, 1283,
      450,  680, 1282,  498, 1288,  680, 1348,  681,  680, 1664,
     1271, 1665,  681, 1289,  680, 1666, 1294,  680, 1273,  680,
     1339, 1667,  680,  407,  408, 1668,  681,  680,  408, 1345,
      680, 1349, 1345,  681,  437,  438, 1669, 1347, 1670,  438,
     1347,  447,  681,  680, 1350,  691,  680,  497,  498,  691,
      681, 1351,  498,  449,  450, 1271,  691,  408,  450, 1355,
     1671, 1672,  447, 1273, 1352,  691,  680, 1354,  438,  680,
     1359,  681, 1409, 1673,  680,  681, 1353,  680, 1674,  407,
      408,  498,  681, 1365,  408,  680, 1675,  450,  680, 1360,

      680,  681, 1677,  680, 1411,  680,  681, 1412,  680, 1682,
     1661, 1683,  680, 1661,  681,  680,  447, 1684, 1687,  680,
      437,  438,  680,  408,  680,  438, 1688,  680,  449,  450,
      681,  680, 1689,  450,  680,  691, 1418,  447, 1690,  680,
      497,  498,  680, 1692, 1413,  498,  691,  680, 1693, 1415,
      680, 1414, 1694,  681,  438,  680,  691,  680,  680, 1695,
      680,  681,  450,  691, 1469, 1696,  680, 1422,  680,  680,
     1697,  680,  681, 1416,  498, 1423, 1417,  681, 1528, 1698,
     1471, 1528,  681, 1472, 1699,  680, 1700, 1428,  680,  681,
      691, 1528,  407,  408, 1528, 1474,  681,  408,  691,  437,

      438,  681,  447, 1473,  438, 1701,  691,  680,  681,  680,
      680, 1475,  680, 1702,  449,  450,  681,  691, 1703,  450,
      497,  498, 1704,  447,  681,  498,  408, 1476, 1477, 1705,
     1525, 1527,  681,  438,  681,  680,  680, 1478,  680,  680,
     1706,  574,  691,  681, 1482,  681, 1581, 1707,  450, 1581,
      680, 1708, 1709,  680,  498,  681, 1529, 1710,  691, 1483,
      691, 1711,  681, 1712, 1713, 1488,  407,  408,  681,  437,
      438,  408,  497,  498,  438,  680,  447,  498,  680, 1581,
     1531, 1530, 1581, 1714,  681, 1715,  681,  691,  449,  450,
     1716,  680,  680,  450,  680,  680,  680,  447, 1717,  680,

      408, 1578, 1532,  438, 1580, 1718,  498, 1719,  680,  407,
      408,  680,  681,  681,  408, 1533, 1720, 1721, 1537,  437,
      438, 1543,  450,  681,  438,  342,  691,  681, 1726, 1582,
      691,  497,  498, 1727,  447,  680,  498, 1538,  680, 1729,
      407,  408,  691,  408, 1730,  408,  449,  450, 1381, 1583,
     1584,  450,  681,  438, 1628,  447,  681,  437,  438,  691,
     1588, 1630,  438,  680,  680,  498,  680,  680,  681,  681,
      691,  447, 1594,  681,  408, 1380, 1379, 1631, 1633, 1723,
      450, 1740, 1723,  449,  450,  681,  691, 1589,  450,  691,
     1632,  438,  447,  497,  498, 1637,  680,  680,  498,  680,

      680,  407,  408,  437,  438,  691,  408, 1734,  438,  497,
      498,  447,  681,  680,  498, 1378,  680,  450, 1676, 1723,
     1731, 1638, 1723,  449,  450,  691, 1728,  498,  450, 1728,
     1678, 1643,  447, 1724,  342,  408, 1724,  438, 1737, 1723,
      681,  681, 1723,  498,  407,  408,  691,  691,  691,  408,
     1743, 1724,  342, 1681, 1724, 1685,  681,  450,  437,  438,
     1377, 1691, 1679,  438,  497,  498, 1680,  691,  447,  498,
      691, 1376, 1375,  681,  681, 1686, 1728, 1374,  408, 1728,
      449,  450, 1722, 1373, 1725,  450,  691, 1732, 1372,  447,
      681,  691,  438, 1733,  691,  691,  681, 1736,  498,  691,

      691, 1738,  343,  681,  691,  691, 1735, 1371, 1739, 1370,
      681, 1742, 1369, 1368,  450, 1741,  341,  342,  690,  341,
     1367,  677, 1366, 1744,  677,  677,  677,  787,  690, 1364,
      677,  690,  690,  690,  690,  824, 1363,  787,  824,  824,
      824,  787,  787, 1362,  690, 1361,  787,  690,  690,  690,
      833, 1358, 1357,  833,  833,  833,  787, 1356, 1343,  824,
      787,  787,  824,  824,  824, 1342, 1341, 1725,   96,   96,
       96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
       96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
       96,   96,   96,   96,   96,   96,   96,   96,   96,   96,

       96,   96,   96,   96,   96,  121,  121,  121,  121,  121,
      121,  121,  121,  121,  121,  121,  121,  121,  121,  121,
      121,  121,  121,  121,  121,  121,  121,  121,  121,  121,
      121,  121,  121,  121,  121,  121,  121,  121,  121,  121,
      121,  121,  124,  124,  124,  124,  124,  124,  124,  124,
      124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
      124,  124,  124,  124,  124,  124,  124,  124,  124,  124,
      124,  124,  124,  124,  124,  124,  124,  124,  124,  144,
      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,

      144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
      144,  144,  144,  144,  144,  144,  151,  151,  151,  151,
      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
      151,  151,  151,  151,  151,  151,  151,  151,  151,  151,
      151,  151,  151,  176,  176,  176,  176,  176,  176,  176,
      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
      180,  180,  180,  180,  180,  180,  180,  180,  180,  180,

      180,  180,  180,  180,  180,  180,  180,  180,  180,  180,
      180,  180,  180,  180,  180,  180,  180,  180,  180,  180,
      180,  180,  180,  180,  180,  180,  180,  187,  187,  187,
      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
      187,  187,  187,  187,  216,  216,  216,  216,  216,  216,
      216,  216,  216,  216,  216,  216,  216,  216,  216,  216,
      216,  216,  216,  216,  216,  216,  216,  216,  216,  216,
      216,  216,  216,  216,  216,  216,  216,  216,  216,  216,

      216,  223,  223,  223,  223,  223,  223,  223,  223,  223,
      223,  223,  223,  223,  223,  223,  223,  223,  223,  223,
      223,  223,  223,  223,  223,  223,  223,  223,  223,  223,
      223,  223,  223,  223,  223,  223,  223,  223,  232,  232,
      232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
      232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
      232,  232,  232,  232,  232,  232,  232,  232,  232,  232,
      232,  232,  232,  232,  232,  237,  237,  237,  237,  237,
      237,  237,  237,  237,  237,  237,  237,  237,  237,  237,
      237,  237,  237,  237,  237,  237,  237,  237,  237,  237,

      237,  237,  237,  237,  237,  237,  237,  237,  237,  237,
      237,  237,  244,  244,  244,  244,  244,  244,  244,  244,
      244,  244,  244,  244,  244,  244,  244,  244,  244,  244,
      244,  244,  244,  244,  244,  244,  244,  244,  244,  244,
      244,  244,  244,  244,  244,  244,  244,  244,  244,  253,
      253,  253,  253,  253,  253,  253,  253,  253,  253,  253,
      253,  253,  253,  253,  253,  253,  253,  253,  253,  253,
      253,  253,  253,  253,  253,  253,  253,  253,  253,  253,
      253,  253,  253,  253,  253,  253,  257,  257,  257,  257,
      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,

      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
      257,  257,  257,  262,  262,  262,  262,  262,  262,  262,
      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
      262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
      267,  267,  267,  267,  267,  267,  267,  267,  267,  267,
      267,  267,  267,  267,  267,  267,  267,  267,  267,  267,
      267,  267,  267,  267,  267,  267,  267,  267,  267,  267,
      267,  267,  267,  267,  267,  267,  267,  274,  274,  274,

      274,  274,  274,  274,  274,  274,  274,  274,  274,  274,
      274,  274,  274,  274,  274,  274,  274,  274,  274,  274,
      274,  274,  274,  274,  274,  274,  274,  274,  274,  274,
      274,  274,  274,  274,  280,  280,  280,  280,  280,  280,
      280,  280,  280,  280,  280,  280,  280,  280,  280,  280,
      280,  280,  280,  280,  280,  280,  280,  280,  280,  280,
      280,  280,  280,  280,  280,  280,  280,  280,  280,  280,
      280,  291,  291,  291,  291,  291,  291,  291,  291,  291,
      291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
      291,  291,  291,  291,  291,  291,  291,  291,  291,  291,

      291,  291,  291,  291,  291,  291,  291,  291,  300,  300,
      300,  300,  300,  300,  300,  300,  300,  300,  300,  300,
      300,  300,  300,  300,  300,  300,  300,  300,  300,  300,
      300,  300,  300,  300,  300,  300,  300,  300,  300,  300,
      300,  300,  300,  300,  300,  304,  304,  304,  304,  304,
      304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
      304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
      304,  304,  304,  304,  304,  304,  304,  304,  304,  304,
      304,  304,  313,  313,  313,  313,  313,  313,  313,  313,
      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,

      313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
      313,  313,  313,  313,  313,  313,  313,  313,  313,  321,
      321,  321,  321,  321,  321,  321,  321,  321,  321,  321,
      321,  321,  321,  321,  321,  321,  321,  321,  321,  321,
      321,  321,  321,  321,  321,  321,  321,  321,  321,  321,
      321,  321,  321,  321,  321,  321,  323,  323,  323,  323,
      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
      323,  323,  323,  323,  323,  323,  323,  323,  323,  323,
      323,  323,  323,  329,  329,  329,  329,  329,  329,  329,

      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
      329,  329,  329,  329,  329,  329,  329,  329,  329,  329,
      333,  333,  333,  333,  333,  333,  333,  333,  333,  333,
      333,  333,  333,  333,  333,  333,  333,  333,  333,  333,
      333,  333,  333,  333,  333,  333,  333,  333,  333,  333,
      333,  333,  333,  333,  333,  333,  333,  344,  344, 1340,
      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,

      344,  344,  344,  344,  346,  833,  833, 1338,  833,  833,
      833, 1002, 1337, 1336, 1002, 1002, 1002, 1335, 1334, 1333,
     1332, 1002, 1331,  346, 1330, 1329,  346,  346,  346, 1328,
     1327, 1326, 1325,  346,  347, 1324,  347,  347, 1003,  347,
     1323, 1003, 1003, 1003, 1321,  347,  347, 1320, 1003,  347,
      347,  347,  354, 1319,  354,  354,  354,  354, 1318,  354,
      354,  354, 1317, 1316, 1315,  354,  354,  354, 1314,  354,
      354,  354,  372,  372,  372,  372,  833, 1313, 1312,  833,
      833,  833,  372, 1311, 1310, 1309, 1308, 1307,  372,  372,
     1306,  372,  372,  372, 1305,  372,  372,  372,  372, 1304,

      372,  372,  380, 1303,  380,  380, 1302,  380, 1301, 1300,
     1299, 1298, 1297,  380,  380, 1296, 1295,  380,  380,  380,
      382,  382,  382,  382, 1293, 1292, 1291, 1290, 1287, 1286,
      382, 1285, 1275, 1274, 1266, 1265,  382,  382, 1263,  382,
      382,  382, 1262,  382,  382,  382,  382, 1261,  382,  382,
      404,  404, 1260,  404,  404,  404,  404,  404,  404,  404,
      404,  404,  404,  404,  404,  404,  404,  404,  404,  404,
      404,  404,  404,  404,  404,  404,  404,  404,  404,  404,
      404,  404,  404,  404,  404,  404,  404,  406, 1259, 1258,
      406, 1257, 1256, 1255, 1254,  406, 1253,  406,  406,  406,

      406,  406, 1252, 1251, 1250, 1249,  406,  406,  406, 1248,
      406,  406,  406, 1247, 1246, 1245, 1244,  406,  414, 1242,
     1241, 1240, 1239, 1238, 1237, 1236, 1235, 1234,  414, 1233,
      414,  414, 1232, 1230, 1152, 1229, 1228,  414, 1227, 1226,
      414,  414,  414, 1225, 1224, 1223, 1222,  414,  423,  423,
      423,  423, 1221, 1220,  423, 1219, 1218, 1216, 1215, 1214,
     1213, 1210, 1209, 1208,  423, 1022,  423,  423, 1191,  423,
     1190, 1188, 1187,  423, 1186, 1185,  423,  423,  423, 1184,
     1098, 1098,  423,  423,  428,  428,  428,  428, 1183, 1182,
      428, 1181, 1180, 1179, 1178, 1177, 1176, 1175, 1174, 1173,

      428, 1172, 1171,  428, 1169, 1168, 1165, 1164, 1163,  428,
     1162, 1161,  428,  428,  428, 1160, 1159, 1158,  428,  428,
      424,  424,  424,  424, 1157, 1156,  424, 1152, 1155, 1154,
     1153, 1150, 1149, 1148, 1147, 1146,  424, 1145,  424,  424,
     1144,  424, 1143, 1142, 1141,  424, 1140, 1139,  424,  424,
      424, 1138, 1136, 1135, 1134,  424,  433,  433,  433,  433,
     1133, 1130,  433, 1129, 1128,  928, 1108,  801, 1107, 1105,
     1104, 1103, 1102, 1101, 1098, 1098, 1097, 1096, 1095, 1094,
     1093,  433, 1092, 1091,  433,  433,  433, 1090, 1089, 1086,
     1085,  433,  434,  434, 1084,  434,  434,  434,  434,  434,

      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
      434,  434,  434,  434,  434,  434,  434,  434,  434,  436,
     1081, 1080,  436, 1079, 1078, 1076, 1075,  436, 1074,  436,
      436,  436,  436,  436, 1073, 1072, 1069, 1068,  436,  436,
      436, 1065,  436,  436,  436, 1064, 1063, 1062, 1061,  436,
      444,  444, 1060,  444,  444,  444,  444,  444,  444,  444,
      444,  444,  444,  444,  444,  444,  444,  444,  444,  444,
      444,  444,  444,  444,  444,  444,  444,  444,  444,  444,
      444,  444,  444,  444,  444,  444,  444,  448,  448, 1059,

     1058,  448, 1057, 1056, 1055, 1054,  448, 1053,  448,  448,
      448,  448,  448, 1052, 1051,  448, 1050,  448,  448,  448,
     1049,  448,  448,  448, 1047, 1046, 1045, 1044,  448,  459,
      459,  459,  459, 1041, 1040,  459, 1039, 1031, 1016,  459,
     1014,  801, 1012, 1010, 1009,  459, 1008,  459,  459,  630,
     1006, 1005, 1001, 1000,  459,  999,  998,  459,  459,  459,
      997,  996,  995,  459,  459,  464,  464,  464,  464,  994,
      993,  464,  992,  991,  990,  989,  988,  987,  986,  985,
      984,  464,  983,  982,  464,  981,  980,  970,  969,  968,
      464,  967,  966,  464,  464,  464,  965,  964,  963,  464,

      464,  461,  461,  461,  461,  962,  961,  461,  527,  960,
      959,  461,  956,  954,  953,  952,  951,  461,  948,  461,
      461,  947,  946,  691,  936,  826,  461,  670,  918,  461,
      461,  461,  914,  913,  911,  910,  461,  466,  466,  466,
      466,  909,  630,  466,  906,  905,  901,  782,  899,  898,
      897,  896,  895,  894,  893,  892,  891,  890,  889,  886,
      885,  884,  466,  882,  881,  466,  466,  466,  880,  879,
      878,  877,  466,  470,  470,  470,  470,  876,  875,  470,
      874,  873,  872,  870,  869,  868,  867,  866,  865,  470,
      527,  470,  470,  863,  862,  859,  857,  856,  470,  855,

      854,  470,  470,  470,  853,  425,  848,  470,  470,  474,
      474,  474,  474,  844,  843,  474,  826,  821,  805,  804,
     1745,  348,  348,  348,  801,  474,  644,  799,  474,  797,
      796,  795,  794,  793,  474,  630,  788,  474,  474,  474,
      786,  784,  619,  474,  474,  471,  471,  471,  471,  619,
      783,  471,  780,  777,  776,  775,  606,  773,  602,  771,
      770,  471,  769,  471,  471,  768,  764,  763,  762,  760,
      471,  757,  576,  471,  471,  471,  756,  755,  754,  753,
      471,  479,  479,  479,  479,  752,  557,  479,  557,  751,
      750,  749,  545,  746,  745,  744,  743,  532,  742,  527,

      739,  514,  738,  737,  734,  495,  479,  730,  490,  479,
      479,  479,  729,  485,  728,  726,  479,  480,  468,  456,
      480,  718,  718,  718,  435,  425,  713,  480,  421,  710,
      480,  480,  480,  415,  708,  405,  388,  480,  484,  484,
      689,  484,  484,  484,  484,  484,  484,  484,  484,  484,
      484,  484,  484,  484,  484,  484,  484,  484,  484,  484,
      484,  484,  484,  484,  484,  484,  484,  484,  484,  484,
      484,  484,  484,  484,  484,  489,  489,  683,  489,  489,
      489,  489,  489,  489,  489,  489,  489,  489,  489,  489,
      489,  489,  489,  489,  489,  489,  489,  489,  489,  489,

      489,  489,  489,  489,  489,  489,  489,  489,  489,  489,
      489,  489,  494,  494,  682,  494,  494,  494,  494,  494,
      494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
      494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
      494,  494,  494,  494,  494,  494,  494,  494,  494,  496,
      676,  348,  496,  348,  644,  345,  642,  496,  639,  496,
      496,  496,  496,  496,  638,  631,  630,  626,  496,  496,
      496,  624,  496,  496,  496,  621,  619,  619,  617,  496,
      503,  616,  614,  503,  612,  611,  503,  610,  608,  604,
      576,  562,  561,  560,  503,  558,  557,  553,  503,  545,

      541,  532,  527,  514,  505,  503,  495,  490,  503,  503,
      503,  485,  468,  456,  435,  503,  507,  507,  507,  507,
      435,  421,  507,  405,  388,  348,  345, 1745, 1745, 1745,
     1745, 1745, 1745, 1745,  507,  507, 1745, 1745, 1745, 1745,
     1745,  507, 1745, 1745,  507,  507,  507, 1745, 1745, 1745,
     1745,  507,  516,  516,  516,  516, 1745, 1745,  516, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,  516, 1745,
      516,  516, 1745, 1745, 1745, 1745, 1745,  516, 1745, 1745,
      516,  516,  516, 1745, 1745, 1745,  516,  516,  520,  520,
      520,  520, 1745, 1745,  520, 1745, 1745, 1745, 1745, 1745,

     1745, 1745, 1745, 1745,  520, 1745, 1745,  520, 1745, 1745,
     1745, 1745, 1745,  520, 1745, 1745,  520,  520,  520, 1745,
     1745, 1745,  520,  520,  517,  517,  517,  517, 1745, 1745,
      517, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
      517, 1745,  517,  517, 1745, 1745, 1745, 1745, 1745,  517,
     1745, 1745,  517,  517,  517, 1745, 1745, 1745, 1745,  517,
      525,  525,  525,  525, 1745, 1745,  525, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745,  525, 1745, 1745,  525,  525,
      525, 1745, 1745, 1745, 1745,  525,  526, 1745, 1745, 1745,

     1745, 1745, 1745, 1745, 1745, 1745,  526, 1745,  526, 1745,
     1745, 1745, 1745, 1745, 1745,  526, 1745, 1745,  526,  526,
      526, 1745, 1745, 1745, 1745,  526,  531,  531, 1745,  531,
     1745, 1745, 1745, 1745, 1745, 1745,  531, 1745, 1745,  531,
      531,  531, 1745, 1745, 1745, 1745,  531,  536,  536, 1745,
      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
      536,  536,  536,  536, 1745,  536,  536,  536,  536,  536,
      536,  536,  536,  536,  540, 1745, 1745,  540, 1745, 1745,
     1745, 1745, 1745, 1745,  540, 1745, 1745,  540,  540,  540,

     1745, 1745, 1745, 1745,  540,  542,  542,  542,  542,  542,
      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
     1745,  542,  542,  542,  542,  542,  542,  542,  542,  542,
      542,  542,  544,  544, 1745,  544,  544,  544,  544,  544,
      544,  544,  544,  544,  544,  544,  544,  544,  544,  544,
      544,  544,  544,  544,  544,  544,  544, 1745,  544,  544,
      544,  544,  544,  544,  544,  544,  544,  544,  544,  552,
     1745, 1745,  552, 1745, 1745, 1745, 1745, 1745, 1745,  552,
     1745, 1745,  552,  552,  552, 1745, 1745, 1745, 1745,  552,

      556,  556, 1745,  556,  556,  556,  556,  556,  556,  556,
      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
      556,  556,  556,  556,  556,  556,  556,  559,  559, 1745,
      559, 1745,  559,  559,  559,  559,  559,  559,  559,  559,
     1745,  559,  559,  559,  559, 1745,  559,  559,  559,  559,
      559,  559, 1745,  559, 1745,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  569, 1745, 1745,  569, 1745, 1745,
     1745, 1745, 1745, 1745,  569, 1745, 1745, 1745, 1745,  569,
      569, 1745,  569, 1745, 1745, 1745, 1745, 1745, 1745,  569,

     1745, 1745,  569,  569,  569,  577,  577, 1745,  577, 1745,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
     1745,  577, 1745,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  581,  581, 1745,  581, 1745,  581,  581,  581,
      581,  581,  581,  581,  581,  581,  581,  581,  581,  581,
      581,  581,  581,  581,  581,  581,  581, 1745,  581, 1745,
      581,  581,  581,  581,  581,  581,  581,  581,  581,  590,
     1745, 1745,  590, 1745, 1745, 1745, 1745, 1745, 1745,  590,
     1745, 1745,  590,  590,  590, 1745, 1745, 1745, 1745,  590,

      594,  594, 1745,  594,  594,  594,  594,  594,  594,  594,
      594, 1745, 1745,  594,  594,  594,  594,  594,  594,  594,
      594,  594,  594,  594,  594, 1745,  594, 1745,  594,  594,
      594,  594,  594,  594,  594,  594,  594,  601, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745,  601, 1745,  601,
      601, 1745, 1745, 1745, 1745, 1745,  601, 1745, 1745,  601,
      601,  601, 1745, 1745, 1745, 1745,  601,  605, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745,  605, 1745,  605,
      605, 1745, 1745, 1745, 1745, 1745,  605, 1745, 1745,  605,
      605,  605, 1745, 1745, 1745, 1745,  605,  609,  609, 1745,

      609,  609,  609,  609,  609,  609,  609,  609,  609,  609,
      609,  609,  609,  609,  609,  609,  609,  609,  609,  609,
      609,  609, 1745,  609, 1745,  609,  609,  609,  609,  609,
      609,  609,  609,  609,  613, 1745, 1745,  613, 1745, 1745,
     1745, 1745, 1745, 1745,  613, 1745, 1745,  613,  613,  613,
     1745, 1745, 1745, 1745,  613,  615,  615, 1745,  615,  615,
      615,  615,  615,  615,  615,  615,  615,  615,  615,  615,
      615, 1745,  615,  615,  615,  615,  615,  615,  615,  615,
      615,  615, 1745,  615,  615,  615,  615,  615,  615,  615,
      615,  615,  618,  618, 1745,  618,  618,  618,  618,  618,

      618,  618,  618,  618,  618,  618,  618,  618,  618,  618,
      618,  618,  618,  618,  618,  618,  618,  618,  618,  618,
      618,  618,  618,  618,  618,  618,  618,  618,  618,  620,
      620, 1745,  620,  620,  620,  620,  620,  620,  620,  620,
      620,  620,  620,  620,  620,  620,  620,  620,  620,  620,
      620,  620,  620,  620,  620,  620,  620,  620,  620,  620,
      620,  620,  620,  620,  620,  620,  625,  625, 1745,  625,
      625,  625,  625,  625,  625,  625,  625,  625,  625, 1745,
      625,  625,  625,  625,  625,  625,  625,  625,  625,  625,
      625, 1745,  625, 1745,  625,  625,  625,  625,  625,  625,

      625,  625,  625,  628, 1745, 1745,  628, 1745, 1745, 1745,
     1745,  628, 1745,  628, 1745, 1745,  628,  628,  628, 1745,
     1745, 1745, 1745,  628,  629, 1745,  629,  629,  629,  629,
      629, 1745, 1745, 1745,  629, 1745,  629, 1745, 1745,  629,
      629,  629, 1745, 1745, 1745, 1745,  629,  632,  632, 1745,
      632,  632,  632,  632,  632,  632,  632,  632, 1745, 1745,
      632,  632,  632,  632,  632,  632,  632,  632,  632,  632,
      632,  632, 1745,  632, 1745,  632,  632,  632,  632,  632,
      632,  632,  632,  632,  636,  636,  636,  636,  636,  636,
      636,  636,  636,  636,  636, 1745, 1745,  636,  636,  636,

      636,  636,  636,  636,  636,  636,  636,  636,  636,  636,
      636,  636,  636,  636,  636,  636,  636,  636,  636,  636,
      636,  637,  637, 1745,  637,  637,  637,  637,  637,  637,
     1745,  637,  637,  637,  637,  637,  637,  637,  637,  637,
      637,  637,  637, 1745, 1745,  637,  637,  637, 1745, 1745,
      637,  637,  637,  637,  637,  637,  637,  637,  372,  372,
      372,  372, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745,  372,  372, 1745,  372,  372,  372,
     1745,  372,  372,  372,  372, 1745,  372,  372,  344,  344,
     1745,  344,  344,  344,  344,  344,  344,  344,  344,  344,

      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
      344,  344,  344,  344,  344,  344,  344,  344,  344,  344,
      344,  344,  344,  344,  344,  643, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745,  643,  643, 1745,
     1745, 1745, 1745, 1745,  643, 1745, 1745,  643,  643,  643,
     1745, 1745, 1745, 1745,  643,  347, 1745,  347,  347, 1745,
      347, 1745, 1745, 1745, 1745, 1745,  347,  347, 1745, 1745,
      347,  347,  347,  645, 1745, 1745,  645, 1745, 1745, 1745,
     1745, 1745, 1745,  645, 1745, 1745,  645,  645,  645,  380,
     1745,  380,  380, 1745,  380, 1745, 1745, 1745, 1745, 1745,

      380,  380, 1745, 1745,  380,  380,  380,  382, 1745, 1745,
      382, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745,  382,  382, 1745,  382,  382,  382,  382,  404,
      404, 1745,  404,  404,  404,  404,  404,  404,  404,  404,
      404,  404,  404,  404,  404,  404,  404,  404,  404,  404,
      404,  404,  404,  404,  404,  404,  404,  404,  404,  404,
      404,  404,  404,  404,  404,  404,  406, 1745, 1745,  406,
     1745, 1745, 1745, 1745,  406, 1745,  406,  406,  406,  406,
      406, 1745, 1745, 1745, 1745,  406,  406,  406, 1745,  406,

      406,  406, 1745, 1745, 1745, 1745,  406,  705, 1745, 1745,
      705, 1745, 1745, 1745, 1745,  705, 1745,  705, 1745,  705,
      705,  705, 1745, 1745, 1745, 1745,  705,  705,  705, 1745,
      705,  705,  705, 1745, 1745, 1745, 1745,  705,  414, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,  414, 1745,
      414,  414, 1745, 1745, 1745, 1745, 1745,  414, 1745, 1745,
      414,  414,  414, 1745, 1745, 1745, 1745,  414,  709, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745,  709, 1745, 1745,
      709,  709,  709, 1745, 1745, 1745, 1745,  709,  428,  428,

      428,  428, 1745, 1745,  428, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745,  428, 1745, 1745,  428, 1745, 1745,
     1745, 1745, 1745,  428, 1745, 1745,  428,  428,  428, 1745,
     1745, 1745,  428,  428,  424,  424,  424,  424, 1745, 1745,
      424, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
      424, 1745,  424,  424, 1745,  424, 1745, 1745, 1745,  424,
     1745, 1745,  424,  424,  424, 1745, 1745, 1745, 1745,  424,
      711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
      711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
      711,  711,  711, 1745,  711,  711,  711,  711,  711,  711,

      711,  711,  711,  711,  711,  711,  711,  433,  433,  433,
      433, 1745, 1745,  433, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745,  433, 1745, 1745,  433,  433,  433, 1745, 1745,
     1745, 1745,  433,  714, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745,  714, 1745, 1745,  714, 1745,
     1745, 1745,  714, 1745, 1745,  714,  714,  714, 1745, 1745,
     1745, 1745,  714,  434,  434, 1745,  434,  434,  434,  434,
      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,

      434,  434,  434,  434,  434,  434,  434,  434,  434,  434,
      436, 1745, 1745,  436, 1745, 1745, 1745, 1745,  436, 1745,
      436,  436,  436,  436,  436, 1745, 1745, 1745, 1745,  436,
      436,  436, 1745,  436,  436,  436, 1745, 1745, 1745, 1745,
      436,  715, 1745, 1745,  715, 1745, 1745, 1745, 1745,  715,
     1745,  715, 1745,  715,  715,  715, 1745, 1745, 1745, 1745,
      715,  715,  715, 1745,  715,  715,  715, 1745, 1745, 1745,
     1745,  715,  442,  442, 1745,  442,  442,  442,  442,  442,
      442,  442,  442,  442,  442,  442,  442,  442,  442,  442,
      442,  442,  442,  442,  442,  442,  442,  442,  442,  442,

      442,  442,  442,  442,  442,  442,  442,  442,  442,  444,
      444, 1745,  444,  444,  444,  444,  444,  444,  444,  444,
      444,  444,  444,  444,  444,  444,  444,  444,  444,  444,
      444,  444,  444,  444,  444,  444,  444,  444,  444,  444,
      444,  444,  444,  444,  444,  444,  448,  448, 1745, 1745,
      448, 1745, 1745, 1745, 1745,  448, 1745,  448,  448,  448,
      448,  448, 1745, 1745,  448, 1745,  448,  448,  448, 1745,
      448,  448,  448, 1745, 1745, 1745, 1745,  448,  720, 1745,
     1745,  720, 1745, 1745, 1745, 1745,  720, 1745,  720, 1745,
      720,  720,  720, 1745, 1745, 1745, 1745,  720,  720,  720,

     1745,  720,  720,  720, 1745, 1745, 1745, 1745,  720,  464,
      464,  464,  464, 1745, 1745,  464, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745,  464, 1745, 1745,  464, 1745,
     1745, 1745, 1745, 1745,  464, 1745, 1745,  464,  464,  464,
     1745, 1745, 1745,  464,  464,  461,  461,  461,  461, 1745,
     1745,  461, 1745, 1745, 1745,  461, 1745, 1745, 1745, 1745,
     1745,  461, 1745,  461,  461, 1745, 1745, 1745, 1745, 1745,
      461, 1745, 1745,  461,  461,  461, 1745, 1745, 1745, 1745,
      461,  723,  723,  723,  723,  723,  723,  723,  723,  723,
      723,  723,  723, 1745,  723,  723,  723,  723,  723,  723,

      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
      723,  723,  723,  723,  723,  723,  723,  723,  466,  466,
      466,  466, 1745, 1745,  466, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745,  466, 1745, 1745,  466,  466,  466, 1745,
     1745, 1745, 1745,  466,  725, 1745, 1745,  725, 1745, 1745,
      725, 1745, 1745, 1745,  725, 1745, 1745, 1745, 1745, 1745,
     1745, 1745,  725, 1745, 1745, 1745, 1745, 1745, 1745,  725,
     1745, 1745,  725,  725,  725, 1745, 1745, 1745, 1745,  725,
      474,  474,  474,  474, 1745, 1745,  474, 1745, 1745, 1745,

     1745, 1745, 1745, 1745, 1745, 1745,  474, 1745, 1745,  474,
     1745, 1745, 1745, 1745, 1745,  474, 1745, 1745,  474,  474,
      474, 1745, 1745, 1745,  474,  474,  471,  471,  471,  471,
     1745, 1745,  471, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745,  471, 1745,  471,  471, 1745, 1745, 1745, 1745,
     1745,  471, 1745, 1745,  471,  471,  471, 1745, 1745, 1745,
     1745,  471,  479,  479,  479,  479, 1745, 1745,  479, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745,  479, 1745, 1745,
      479,  479,  479, 1745, 1745, 1745, 1745,  479,  727, 1745,

     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
      727, 1745, 1745, 1745, 1745, 1745, 1745,  727, 1745, 1745,
      727,  727,  727, 1745, 1745, 1745, 1745,  727,  480, 1745,
     1745,  480, 1745, 1745, 1745, 1745, 1745, 1745,  480, 1745,
     1745,  480,  480,  480, 1745, 1745, 1745, 1745,  480,  484,
      484, 1745,  484,  484,  484,  484,  484,  484,  484,  484,
      484,  484,  484,  484,  484,  484,  484,  484,  484,  484,
      484,  484,  484,  484,  484,  484,  484,  484,  484,  484,
      484,  484,  484,  484,  484,  484,  489,  489, 1745,  489,
      489,  489,  489,  489,  489,  489,  489,  489,  489,  489,

      489,  489,  489,  489,  489,  489,  489,  489,  489,  489,
      489,  489,  489,  489,  489,  489,  489,  489,  489,  489,
      489,  489,  489,  494,  494, 1745,  494,  494,  494,  494,
      494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
      494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
      494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
      496, 1745, 1745,  496, 1745, 1745, 1745, 1745,  496, 1745,
      496,  496,  496,  496,  496, 1745, 1745, 1745, 1745,  496,
      496,  496, 1745,  496,  496,  496, 1745, 1745, 1745, 1745,
      496,  731, 1745, 1745,  731, 1745, 1745, 1745, 1745,  731,

     1745,  731, 1745,  731,  731,  731, 1745, 1745, 1745, 1745,
      731,  731,  731, 1745,  731,  731,  731, 1745, 1745, 1745,
     1745,  731,  503, 1745, 1745,  503, 1745, 1745,  503, 1745,
     1745, 1745, 1745, 1745, 1745, 1745,  503, 1745, 1745, 1745,
      503, 1745, 1745, 1745, 1745, 1745, 1745,  503, 1745, 1745,
      503,  503,  503, 1745, 1745, 1745, 1745,  503,  735,  735,
      735,  735, 1745, 1745,  735, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745,  735,  735, 1745, 1745,
     1745, 1745, 1745,  735, 1745, 1745,  735,  735,  735, 1745,
     1745, 1745, 1745,  735,  507,  507,  507,  507, 1745, 1745,

      507, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745,  507,  507, 1745, 1745, 1745, 1745, 1745,  507,
     1745, 1745,  507,  507,  507, 1745, 1745, 1745, 1745,  507,
      520,  520,  520,  520, 1745, 1745,  520, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745,  520, 1745, 1745,  520,
     1745, 1745, 1745, 1745, 1745,  520, 1745, 1745,  520,  520,
      520, 1745, 1745, 1745,  520,  520,  517,  517,  517,  517,
     1745, 1745,  517, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745,  517, 1745,  517,  517, 1745, 1745, 1745, 1745,
     1745,  517, 1745, 1745,  517,  517,  517, 1745, 1745, 1745,

     1745,  517,  525,  525,  525,  525, 1745, 1745,  525, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745,  525, 1745, 1745,
      525,  525,  525, 1745, 1745, 1745, 1745,  525,  740, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
      740, 1745, 1745, 1745, 1745, 1745, 1745,  740, 1745, 1745,
      740,  740,  740, 1745, 1745, 1745, 1745,  740,  526, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,  526, 1745,
      526, 1745, 1745, 1745, 1745, 1745, 1745,  526, 1745, 1745,
      526,  526,  526, 1745, 1745, 1745, 1745,  526,  741, 1745,

     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745,  741, 1745, 1745,
      741,  741,  741, 1745, 1745, 1745, 1745,  741,  531,  531,
     1745,  531, 1745, 1745, 1745, 1745, 1745, 1745,  531, 1745,
     1745,  531,  531,  531, 1745, 1745, 1745, 1745,  531,  536,
      536, 1745,  536,  536,  536,  536,  536,  536,  536,  536,
      536,  536,  536,  536,  536,  536,  536,  536,  536,  536,
      536,  536,  536,  536,  536,  536, 1745,  536,  536,  536,
      536,  536,  536,  536,  536,  536,  540, 1745, 1745,  540,
     1745, 1745, 1745, 1745, 1745, 1745,  540, 1745, 1745,  540,

      540,  540, 1745, 1745, 1745, 1745,  540,  542,  542,  542,
      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
      542,  542,  542,  542,  542,  542,  542,  542,  542,  542,
      542,  542, 1745,  542,  542,  542,  542,  542,  542,  542,
      542,  542,  542,  542,  544,  544, 1745,  544,  544,  544,
      544,  544,  544,  544,  544,  544,  544,  544,  544,  544,
      544,  544,  544,  544,  544,  544,  544,  544,  544, 1745,
      544,  544,  544,  544,  544,  544,  544,  544,  544,  544,
      544,  748, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,

      748, 1745, 1745,  748,  748,  748, 1745, 1745, 1745, 1745,
      748,  552, 1745, 1745,  552, 1745, 1745, 1745, 1745, 1745,
     1745,  552, 1745, 1745,  552,  552,  552, 1745, 1745, 1745,
     1745,  552,  556,  556, 1745,  556,  556,  556,  556,  556,
      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
      556,  556,  556,  556,  556,  556,  556,  556,  556,  559,
      559, 1745,  559, 1745,  559,  559,  559,  559,  559,  559,
      559,  559, 1745,  559,  559,  559,  559, 1745,  559,  559,
      559,  559,  559,  559, 1745,  559, 1745,  559,  559,  559,

      559,  559,  559,  559,  559,  559,  569, 1745, 1745,  569,
     1745, 1745, 1745, 1745, 1745, 1745,  569, 1745, 1745, 1745,
     1745,  569,  569, 1745,  569, 1745, 1745, 1745, 1745, 1745,
     1745,  569, 1745, 1745,  569,  569,  569,  577,  577, 1745,
      577, 1745,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  577,  577,  577,  577,  577,  577,
      577,  577, 1745,  577, 1745,  577,  577,  577,  577,  577,
      577,  577,  577,  577,  581,  581, 1745,  581, 1745,  581,
      581,  581,  581,  581,  581,  581,  581,  581,  581,  581,
      581,  581,  581,  581,  581,  581,  581,  581,  581, 1745,

      581, 1745,  581,  581,  581,  581,  581,  581,  581,  581,
      581,  590, 1745, 1745,  590, 1745, 1745, 1745, 1745, 1745,
     1745,  590, 1745, 1745,  590,  590,  590, 1745, 1745, 1745,
     1745,  590,  594,  594, 1745,  594,  594,  594,  594,  594,
      594,  594,  594, 1745, 1745,  594,  594,  594,  594,  594,
      594,  594,  594,  594,  594,  594,  594, 1745,  594, 1745,
      594,  594,  594,  594,  594,  594,  594,  594,  594,  601,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,  601,
     1745,  601,  601, 1745, 1745, 1745, 1745, 1745,  601, 1745,
     1745,  601,  601,  601, 1745, 1745, 1745, 1745,  601,  772,

     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,  772, 1745,
     1745,  772,  772,  772, 1745, 1745, 1745, 1745,  772,  605,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,  605,
     1745,  605,  605, 1745, 1745, 1745, 1745, 1745,  605, 1745,
     1745,  605,  605,  605, 1745, 1745, 1745, 1745,  605,  774,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,  774, 1745,
     1745,  774,  774,  774, 1745, 1745, 1745, 1745,  774,  609,
      609, 1745,  609,  609,  609,  609,  609,  609,  609,  609,

      609,  609,  609,  609,  609,  609,  609,  609,  609,  609,
      609,  609,  609,  609, 1745,  609, 1745,  609,  609,  609,
      609,  609,  609,  609,  609,  609,  613, 1745, 1745,  613,
     1745, 1745, 1745, 1745, 1745, 1745,  613, 1745, 1745,  613,
      613,  613, 1745, 1745, 1745, 1745,  613,  615,  615, 1745,
      615,  615,  615,  615,  615,  615,  615,  615,  615,  615,
      615,  615,  615, 1745,  615,  615,  615,  615,  615,  615,
      615,  615,  615,  615, 1745,  615,  615,  615,  615,  615,
      615,  615,  615,  615,  618,  618, 1745,  618,  618,  618,
      618,  618,  618,  618,  618,  618,  618,  618,  618,  618,

      618,  618,  618,  618,  618,  618,  618,  618,  618,  618,
      618,  618,  618,  618,  618,  618,  618,  618,  618,  618,
      618,  620,  620, 1745,  620,  620,  620,  620,  620,  620,
      620,  620,  620,  620,  620,  620,  620,  620,  620,  620,
      620,  620,  620,  620,  620,  620,  620,  620,  620,  620,
      620,  620,  620,  620,  620,  620,  620,  620,  625,  625,
     1745,  625,  625,  625,  625,  625,  625,  625,  625,  625,
      625, 1745,  625,  625,  625,  625,  625,  625,  625,  625,
      625,  625,  625, 1745,  625, 1745,  625,  625,  625,  625,
      625,  625,  625,  625,  625,  790, 1745, 1745, 1745, 1745,

     1745, 1745, 1745, 1745,  790, 1745,  790,  790,  790,  790,
      790, 1745, 1745, 1745,  790, 1745,  790, 1745, 1745,  790,
      790,  790, 1745, 1745, 1745, 1745,  790,  629, 1745,  629,
      629,  629,  629,  629, 1745, 1745, 1745,  629, 1745,  629,
     1745, 1745,  629,  629,  629, 1745, 1745, 1745, 1745,  629,
      792, 1745, 1745,  792, 1745, 1745, 1745, 1745,  792, 1745,
      792, 1745, 1745,  792,  792,  792, 1745, 1745, 1745, 1745,
      792,  632,  632, 1745,  632,  632,  632,  632,  632,  632,
      632,  632, 1745, 1745,  632,  632,  632,  632,  632,  632,
      632,  632,  632,  632,  632,  632, 1745,  632, 1745,  632,

      632,  632,  632,  632,  632,  632,  632,  632,  636,  636,
      636,  636,  636,  636,  636,  636,  636,  636,  636, 1745,
     1745,  636,  636,  636,  636,  636,  636,  636,  636,  636,
      636,  636,  636,  636,  636,  636,  636,  636,  636,  636,
      636,  636,  636,  636,  636,  637,  637, 1745,  637,  637,
      637,  637,  637,  637, 1745,  637,  637,  637,  637,  637,
      637,  637,  637,  637,  637,  637,  637, 1745, 1745,  637,
      637,  637, 1745, 1745,  637,  637,  637,  637,  637,  637,
      637,  637,  372, 1745, 1745,  372, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,

     1745, 1745, 1745, 1745, 1745, 1745, 1745,  372, 1745, 1745,
      372,  372,  372,  372,  643, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745,  643,  643, 1745, 1745,
     1745, 1745, 1745,  643, 1745, 1745,  643,  643,  643, 1745,
     1745, 1745, 1745,  643,  800,  800, 1745,  800,  800,  800,
      800, 1745,  800,  800,  800,  800,  800,  800,  800,  800,
      800,  800,  800,  800,  800,  800,  800,  800,  800,  800,
      800,  800,  800,  800,  800,  800,  800,  800,  800,  800,
      800,  645,  645, 1745,  645, 1745, 1745, 1745, 1745, 1745,
     1745,  645, 1745, 1745,  645,  645,  645,  347, 1745,  347,

      347, 1745,  347, 1745, 1745, 1745, 1745, 1745,  347,  347,
     1745, 1745,  347,  347,  347,  814,  814, 1745,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  677, 1745, 1745,  677, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745,  677, 1745, 1745,
      677,  677,  677,  825, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745,  825, 1745,  825, 1745,  825,  825,

     1745, 1745, 1745, 1745, 1745,  825, 1745, 1745,  825,  825,
      825, 1745, 1745,  825,  831,  831, 1745,  831,  831,  831,
      831,  831,  831,  831,  831,  831,  831,  831,  831,  831,
      831,  831,  831,  831,  831,  831,  831,  831,  831,  831,
      831,  831,  831,  831,  831,  831,  831,  831,  831,  831,
      831,  382, 1745, 1745,  382, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745,  382,  382, 1745,  382,
      382,  382,  382,  705, 1745, 1745,  705, 1745, 1745, 1745,
     1745,  705, 1745,  705,  705,  705,  705,  705, 1745, 1745,

     1745, 1745,  705,  705,  705, 1745,  705,  705,  705, 1745,
     1745, 1745, 1745,  705,  406, 1745, 1745,  406, 1745, 1745,
     1745, 1745,  406, 1745,  406,  406,  406,  406,  406, 1745,
     1745, 1745, 1745,  406,  406,  406, 1745,  406,  406,  406,
     1745, 1745, 1745, 1745,  406,  414, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745,  414, 1745,  414,  414, 1745,
     1745, 1745, 1745, 1745,  414, 1745, 1745,  414,  414,  414,
     1745, 1745, 1745, 1745,  414,  711,  711,  711,  711,  711,
      711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
      711,  711,  711,  711,  711,  711,  711,  711,  711,  711,

      711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
      711,  711,  714, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745,  714, 1745, 1745,  714, 1745, 1745,
     1745,  714, 1745, 1745,  714,  714,  714, 1745, 1745, 1745,
     1745,  714,  715, 1745, 1745,  715, 1745, 1745, 1745, 1745,
      715, 1745,  715,  715,  715,  715,  715, 1745, 1745, 1745,
     1745,  715,  715,  715, 1745,  715,  715,  715, 1745, 1745,
     1745, 1745,  715,  436, 1745, 1745,  436, 1745, 1745, 1745,
     1745,  436, 1745,  436,  436,  436,  436,  436, 1745, 1745,
     1745, 1745,  436,  436,  436, 1745,  436,  436,  436, 1745,

     1745, 1745, 1745,  436,  850,  850, 1745,  850,  850,  850,
      850,  850,  850,  850,  850,  850,  850,  850,  850,  850,
      850,  850,  850,  850,  850,  850,  850,  850,  850,  850,
      850,  850,  850,  850,  850,  850,  850,  850,  850,  850,
      850,  720,  720, 1745, 1745,  720, 1745, 1745, 1745, 1745,
      720, 1745,  720,  720,  720,  720,  720, 1745, 1745,  720,
     1745,  720,  720,  720, 1745,  720,  720,  720, 1745, 1745,
     1745, 1745,  720,  448,  448, 1745, 1745,  448, 1745, 1745,
     1745, 1745,  448, 1745,  448,  448,  448,  448,  448, 1745,
     1745,  448, 1745,  448,  448,  448, 1745,  448,  448,  448,

     1745, 1745, 1745, 1745,  448,  723,  723,  723,  723,  723,
      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
      723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
      723,  723,  725, 1745, 1745,  725, 1745, 1745,  725, 1745,
     1745, 1745,  725, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
      725, 1745, 1745, 1745, 1745, 1745, 1745,  725, 1745, 1745,
      725,  725,  725, 1745, 1745, 1745, 1745,  725,  727, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
      727, 1745, 1745, 1745, 1745, 1745, 1745,  727, 1745, 1745,

      727,  727,  727, 1745, 1745, 1745, 1745,  727,  731, 1745,
     1745,  731, 1745, 1745, 1745, 1745,  731, 1745,  731,  731,
      731,  731,  731, 1745, 1745, 1745, 1745,  731,  731,  731,
     1745,  731,  731,  731, 1745, 1745, 1745, 1745,  731,  496,
     1745, 1745,  496, 1745, 1745, 1745, 1745,  496, 1745,  496,
      496,  496,  496,  496, 1745, 1745, 1745, 1745,  496,  496,
      496, 1745,  496,  496,  496, 1745, 1745, 1745, 1745,  496,
      735,  735,  735,  735, 1745, 1745,  735, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,  735,  735,
     1745, 1745, 1745, 1745, 1745,  735, 1745, 1745,  735,  735,

      735, 1745, 1745, 1745, 1745,  735,  861,  861,  861,  861,
     1745, 1745,  861, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745,  861, 1745, 1745, 1745, 1745,
     1745,  861, 1745, 1745,  861,  861,  861, 1745, 1745, 1745,
     1745,  861,  740, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745,  740, 1745, 1745, 1745, 1745, 1745,
     1745,  740, 1745, 1745,  740,  740,  740, 1745, 1745, 1745,
     1745,  740,  864, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745,  864, 1745,  864, 1745, 1745, 1745, 1745, 1745,
     1745,  864, 1745, 1745,  864,  864,  864, 1745, 1745, 1745,

     1745,  864,  871, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745,  871, 1745, 1745, 1745, 1745, 1745,
     1745,  871, 1745, 1745,  871,  871,  871, 1745, 1745, 1745,
     1745,  871,  883,  883,  883,  883,  883,  883,  883,  883,
      883,  883,  883,  883,  883,  883,  883,  883,  883,  883,
      883, 1745,  883,  883,  883,  883,  883,  883, 1745,  883,
      883, 1745, 1745,  883,  883,  883,  883,  883,  883,  601,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,  601,
     1745,  601,  601, 1745, 1745, 1745, 1745, 1745,  601, 1745,
     1745,  601,  601,  601, 1745, 1745, 1745, 1745,  601,  605,

     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,  605,
     1745,  605,  605, 1745, 1745, 1745, 1745, 1745,  605, 1745,
     1745,  605,  605,  605, 1745, 1745, 1745, 1745,  605,  904,
     1745, 1745, 1745, 1745,  904, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
      904, 1745, 1745,  904,  904,  904, 1745, 1745, 1745, 1745,
      904,  790, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
      790, 1745,  790,  790,  790,  790,  790, 1745, 1745, 1745,
      790, 1745,  790, 1745, 1745,  790,  790,  790, 1745, 1745,
     1745, 1745,  790,  907, 1745, 1745,  907, 1745, 1745, 1745,

     1745,  907, 1745,  907, 1745, 1745,  907,  907,  907, 1745,
     1745, 1745, 1745,  907,  908, 1745,  908,  908,  908,  908,
      908, 1745, 1745, 1745,  908, 1745,  908, 1745, 1745,  908,
      908,  908, 1745, 1745, 1745, 1745,  908,  372, 1745, 1745,
      372, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745,  372, 1745, 1745,  372,  372,  372,  372,  800,
      800, 1745,  800,  800,  800,  800,  800,  800,  800,  800,
      800,  800,  800,  800,  800,  800,  800,  800,  800,  800,
      800,  800,  800,  800,  800,  800,  800,  800,  800,  800,

      800,  800,  800,  800,  800,  800,  915, 1745, 1745,  915,
     1745, 1745, 1745, 1745, 1745, 1745,  915, 1745, 1745,  915,
      915,  915,  354, 1745,  354, 1745,  354,  354, 1745,  354,
     1745, 1745, 1745, 1745, 1745,  354,  354, 1745, 1745,  354,
      354,  354,  814,  814, 1745,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
      814,  814,  814,  814,  814,  814,  814,  814,  814,  825,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
      825, 1745,  825, 1745,  825,  825, 1745, 1745, 1745, 1745,

     1745,  825, 1745, 1745,  825,  825,  825, 1745, 1745,  825,
      830,  830, 1745,  830,  830,  830,  830,  830,  830,  830,
      830,  830,  830,  830,  830,  830,  830,  830,  830,  830,
      830,  830,  830,  830,  830,  830,  830,  830,  830,  830,
      830,  830,  830,  830,  830,  830,  830,  831,  831, 1745,
      831,  831,  831,  831,  831,  831,  831,  831,  831,  831,
      831,  831,  831,  831,  831,  831,  831,  831,  831,  831,
      831,  831,  831,  831,  831,  831,  831,  831,  831,  831,
      831,  831,  831,  831,  382, 1745, 1745,  382, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,

     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,  382,
      382, 1745,  382,  382,  382,  382,  347,  347, 1745,  347,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,  347,
     1745,  347,  347, 1745,  347,  347, 1745, 1745, 1745, 1745,
      347,  347, 1745, 1745,  347,  347,  347, 1745,  347,  406,
     1745, 1745,  406, 1745, 1745, 1745, 1745,  406, 1745,  406,
      406,  406,  406,  406, 1745, 1745, 1745, 1745,  406,  406,
      406, 1745,  406,  406,  406, 1745, 1745, 1745, 1745,  406,
      711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
      711,  711,  711,  711,  711,  711,  711,  711,  711,  711,

      711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
      711,  711,  711,  711,  711,  711,  711,  436, 1745, 1745,
      436, 1745, 1745, 1745, 1745,  436, 1745,  436,  436,  436,
      436,  436, 1745, 1745, 1745, 1745,  436,  436,  436, 1745,
      436,  436,  436, 1745, 1745, 1745, 1745,  436,  850,  850,
     1745,  850,  850,  850,  850,  850,  850,  850,  850,  850,
      850,  850,  850,  850,  850,  850,  850,  850,  850,  850,
      850,  850,  850,  850,  850,  850,  850,  850,  850,  850,
      850,  850,  850,  850,  850,  448,  448, 1745, 1745,  448,
     1745, 1745, 1745, 1745,  448, 1745,  448,  448,  448,  448,

      448, 1745, 1745,  448, 1745,  448,  448,  448, 1745,  448,
      448,  448, 1745, 1745, 1745, 1745,  448,  496, 1745, 1745,
      496, 1745, 1745, 1745, 1745,  496, 1745,  496,  496,  496,
      496,  496, 1745, 1745, 1745, 1745,  496,  496,  496, 1745,
      496,  496,  496, 1745, 1745, 1745, 1745,  496,  861,  861,
      861,  861, 1745, 1745,  861, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745,  861, 1745, 1745,
     1745, 1745, 1745,  861, 1745, 1745,  861,  861,  861, 1745,
     1745, 1745, 1745,  861,  957,  957,  957,  957, 1745, 1745,
      957, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,

     1745, 1745,  957,  957, 1745, 1745, 1745, 1745, 1745,  957,
     1745, 1745,  957,  957,  957, 1745, 1745, 1745, 1745,  957,
      864, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
      864, 1745,  864, 1745, 1745, 1745, 1745, 1745, 1745,  864,
     1745, 1745,  864,  864,  864, 1745, 1745, 1745, 1745,  864,
      871, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745,  871, 1745, 1745, 1745, 1745, 1745, 1745,  871,
     1745, 1745,  871,  871,  871, 1745, 1745, 1745, 1745,  871,
     1004, 1745, 1745, 1004, 1745, 1745, 1745, 1745, 1745, 1745,
     1004, 1745, 1745, 1004, 1004, 1004, 1745, 1745, 1745, 1745,

     1004, 1007, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1007, 1745, 1007, 1007, 1007, 1007, 1007, 1745, 1745, 1745,
     1007, 1745, 1007, 1745, 1745, 1007, 1007, 1007, 1745, 1745,
     1745, 1745, 1007,  908, 1745,  908,  908,  908,  908,  908,
     1745, 1745, 1745,  908, 1745,  908, 1745, 1745,  908,  908,
      908, 1745, 1745, 1745, 1745,  908, 1013, 1013, 1745, 1013,
     1745, 1745, 1745, 1745, 1745, 1745, 1013, 1745, 1745, 1013,
     1013, 1013,  354, 1745,  354, 1745,  354,  354, 1745,  354,
     1745, 1745, 1745, 1745, 1745,  354,  354, 1745, 1745,  354,
      354,  354, 1024, 1024, 1745, 1024, 1024, 1024, 1024, 1024,

     1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
     1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
     1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1077,
     1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
     1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1745, 1077,
     1077, 1077, 1077, 1077, 1077, 1745, 1077, 1077, 1745, 1077,
     1745, 1077, 1077, 1077, 1077, 1077, 1099, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1099, 1745, 1745,
     1099, 1745, 1745, 1745, 1745, 1745, 1745, 1099, 1745, 1745,
     1099, 1099, 1099, 1745, 1745, 1745, 1745, 1099, 1100, 1745,

     1745, 1745, 1745, 1745, 1100, 1745, 1745, 1100, 1745, 1745,
     1745, 1745, 1745, 1745, 1100, 1745, 1745, 1100, 1100, 1100,
     1745, 1745, 1745, 1745, 1100, 1113, 1113, 1745, 1113, 1113,
     1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
     1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
     1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
     1113, 1113, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166,
     1166, 1745, 1166, 1166, 1166, 1166, 1166, 1166, 1745, 1166,
     1166, 1745, 1745, 1745, 1166, 1166, 1166, 1166, 1166, 1167,

     1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
     1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1745, 1167,
     1167, 1167, 1167, 1167, 1167, 1745, 1167, 1167, 1745, 1745,
     1745, 1167, 1167, 1167, 1167, 1167, 1231, 1231, 1231, 1231,
     1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231,
     1231, 1231, 1231, 1231, 1231, 1745, 1231, 1231, 1231, 1231,
     1231, 1231, 1745, 1231, 1231, 1745, 1745, 1745, 1231, 1231,
     1231, 1231, 1231, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
     1243, 1243, 1745, 1243, 1243, 1243, 1243, 1243, 1243, 1745,

     1243, 1243, 1745, 1745, 1745, 1243, 1243, 1243, 1243, 1243,
     1344, 1344, 1745, 1344, 1344, 1344, 1344, 1344, 1344, 1344,
     1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344,
     1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344,
     1344, 1344, 1344, 1344, 1344, 1344, 1344, 1346, 1346, 1745,
     1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346,
     1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346,
     1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346,
     1346, 1346, 1346, 1346,   95, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,

     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745
    } ;

static const flex_int16_t yy_chk[13170] =
    {   0,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    4,    7,    8,    4,   23,   24,
       25,   26,   23,   24,   25,   26,   39,    4,    4,   40,

        4,    4,   43,   44,    4,    4,    4,   51,   52,   61,
       62,   67,    7,    8,   43,   44,   91, 1311, 1312,   47,
       47,   92,   47,   57,   47,   57,   91,   91,   68,   43,
       44,   92,   92,  243,  103,    7,    8,  243,   23,   24,
       25,   26,   48,   48,  103,   48,   39,   48,  112,   40,
       57,  112,   43,   44, 1313,  310,  103,   51,   52,   61,
       62,   67,    4,    5,    5,    5,    5,    5,    5,    5,
       47,    5,    5,   57,    5,    5,    5,    5,   68,    5,
      310,    5,    5,   49,   73,   49,    5,    5,    5,    5,
        5,    5,  126,   48,  126,   49,  140,  140,  140,  140,

       49,   55,   55,  113,   55,   50,  113,   50,  130,  248,
       49,   73,  248,  130,    5,    5,    5,   50,  131,  131,
      248,  131,   50,   56,   56,  260,   56,   99,   99,  260,
       99,  113,   50,   49,   73,   58,  349,   58,   59,  349,
       59,    5,    5,    5,    5,    6,    6,    6,    6,    6,
        6,    6,   55,    6,    6,   50,    6,    6,    6,    6,
       74,    6,   58,    6,    6,   59,   65,   75,    6,    6,
        6,    6,    6,    6,   56,  356,   65,   65,   99,  104,
      131,  104,  104,  104,  104,   58,  285,   74,   59,  104,
      104,  285, 1314,   65,   75,  104,    6,    6,    6,  578,

      116,  578,  116,  116,  116,  162,  162,  162,  162,  356,
       74,  116,  171,  171,  171,  171,   65,   75,  104,  207,
      207,  207,  207,    6,    6,    6,    6,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,

        9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
        9,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
       11,   11,   11,   11,   11,   13,   13,   13,   13,   13,

       13,   13,   76,   13,   13,   66,   13,   13,   13,   13,
       60,   13,   60,   13,   13,   66,   66,   77,   13,   13,
       13,   13,   13,   13,  261,  127,  289,  127,  261,   76,
      192,  289,   66,  192,   78,  121,  121,   60,  122,  122,
      121,  311,   81,  122,   77,  192,   13,   13,   13,   82,
      139,  139,   76,  139,  545,   66,  350,   81,  223,   98,
       60,   78,   98,  127,   82,  545,  311,   77,  350,  121,
      223,  612,  122,   13,   13,   13,   13,   14,   14,   14,
       14,   14,   14,   14,   78,   14,   14,   98,   14,   14,
       14,   14,   81,   14,   85,   14,   14,   86,  612,   82,

       14,   14,   14,   14,   14,   14,   85,  362,  223,   86,
       98, 1117,  139,  317,  170,  170,   89,  170,  371,  117,
      233,   85,  117,  233,   86,  233,   89,   89,   14,   14,
       14,  317,  362,  355, 1315,  117,  355,  251, 1117,  371,
      251,  117,   90,   89,   85,  144,  144,   86,  251,  363,
      144,  390,   90,   90,  390,   14,   14,   14,   14,   15,
       15,   15,   15,   15,   15,   15,   89,   15,   15,   90,
       15,   15,   15,   15,  363,   15,  170,   15,   15,  144,
       93,  365,   15,   15,   15,   15,   15,   15,   93,  145,
      145, 1316,   90,  107,  145,  107,  107,  117,  107,  107,

      107,  175,  175,   93,  175,   93,  365,  107,  443,  366,
       15,   15,   15,  358,  358,  358,  358,  392,  392,  109,
      392,  109,  109,  145,  109,  109,  109, 1317,  580,  443,
       93,   93,  107,  109,  366,  580,  367,   15,   15,   15,
       15,   16,   16,   16,   16,   16,   16,   16,   94,   16,
       16, 1318,   16,   16,   16,   16,   94,   16,  109,   16,
       16,  367, 1319,  175,   16,   16,   16,   16,   16,   16,
     1320,   94,  368,   94,  133,  133,  133,  133,  134,  134,
      134,  134,  586,  414,  138,  138,  138,  138,  414,  586,
      585,  133,   16,   16,   16,  134,  133,  368,   94,   94,

      134,  138,  395,  265,  585,  395,  138,  265,  138,  398,
      398, 1321,  398,  265,  393,  265,  393,  393,  393,   16,
       16,   16,   16,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,

       17,   17,   17,   17,   17,   17,   17,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   21,   21,   21,   21,   21,   21,   21,   21,   21,

       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
       21,   21,   21,   21,   21,   27,   27,   27,   27,   27,
       27,   27,  502,   27,   27,  502,   27,   27,   27,   27,
     1323,   27,  400,   27,   27,  400,  151,  502,   27,   27,

       27,   27,   27,   27,  466,  187,  187,  466,  151,  151,
      187,  409,  409,  151,  409,  466,  111,  151,  114,  111,
      400,  114,  646,  361,  114,  646,   27,   27,   27,  111,
      111,  266,  111,  111,  114,  266,  111,  111,  111,  187,
      114,  266,  151,  266,  111,  677,  114,  361,  677,  179,
      179, 1324,  179,   27,   27,   27,   27,   28,   28,   28,
       28,   28,   28,   28, 1063,   28,   28,  111,   28,   28,
       28,   28,  361,   28,  152,   28,   28, 1325,  628, 1063,
       28,   28,   28,   28,   28,   28,  152,  152,  188,  188,
      628,  152,  992,  188,  111,  152,  114,  156,  156,  156,

      156,  157,  157,  157,  157,  616,  992,  601,   28,   28,
       28,  179,  601,  401,  156,  401,  401,  401,  157,  156,
      152,  790,  188,  157,  401,  417,  417,  616,  417,  425,
      425,  425,  425,  790, 1326,   28,   28,   28,   28,   29,
       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,

       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
       29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
       29,   29,   29,   31,   31,   31,   31,   31,   31,   31,
       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,

       31,   31,   31,   31,   31,   31,   31,   33,   33,   33,
       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
       33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
       33,   35,   35,   35,   35,   35,   35,   35,   35,   35,

       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
       35,   35,   35,   35,   35,   37,   37,   37,   37,   37,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,

       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,

       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
       41,   41,   41,   45,   45,   45,   45,   45,   45,   45,
       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,

       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
       45,   45,   45,   45,   45,   45,   45,   53,   53,   53,
       53,   53,   53,   53,   53,   53,   53,   53,   53,   53,
       53,   53,   53,   53,   53,   53,   53,   53,   53,   53,
       53,   53,   53,   53,   53,   53,   53,   53,   53,   53,
       53,   53,   53,   53,   53,   53,   53,   53,   53,   53,
       53,   53,   53,   53,   53,   53,   53,   53,   53,   53,
       53,   53,   53,   53,   53,   53,   53,   53,   53,   53,
       53,   53,   53,   53,   53,   53,   53,   53,   53,   53,

       53,   53,   53,   53,   53,   53,   53,   53,   53,   53,
       53,   63,   63,   63,   63,   63,   63,   63,   63,   63,
       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
       63,   63,   63,   63,   63,   69,   69,   69,   69,   69,

       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
       69,   69,   69,   69,   69,   69,   69,   69,   69,   71,
       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,

       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
       71,   71,   71,   79,   79,   79,   79,   79,   79,   79,
       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,

       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
       79,   79,   79,   79,   79,   79,   79,   83,   84,  407,
      623,   83,   84,  407, 1327,  567,   83,   84,  567,  164,
      164,  164,  164, 1328,   83,   84,  567,  988,  136,  136,
      136,  136,   83,   84,  988,  623,  164,  159,  159,  159,
      159,  164,  407,   83,   84,  136,  605,   83,   84,  153,
      136,  605,  569,  382,  159,  569,  382,   83,   84,  159,

     1329,  153,  153,  569,  429,  429,  153,  429,   83,   84,
      153, 1330,   83,   84,   87,   87,   87,   87,   87,   87,
       87,   87,   87,   87,   87,   87,   87,   87,   87,   87,
       87,  554,   87,   87,  554,  153,  554,   87,   87,   87,
       87,   87,  680,   87,  382,  680,  391,  698,  136,  391,
      698,  709,  135,  135,  135,  135,  709,  159,  165,  165,
      165,  165,  391, 1194, 1331,   87,   87,   87,  391,  135,
      382,  135,  135,  135,  135,  165,  135,  772,  439,  439,
      165,  439,  772,  383,  183,  183,  383,  183,  254,  254,
     1194,  254,   87,   87,   87,   87,   88,   88,   88,   88,

       88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
       88,   88,   88,  774,   88,   88,  657, 1332,  774,   88,
       88,   88,   88,   88,  391,   88, 1333, 1334,  115,  115,
      658,  115,  135,  718,  383,  123,  123, 1335,  123,  254,
      115,  657,  115,  115,  115,  115,  183,   88,   88,   88,
      115,  115,  123,  123,  718,  658,  115,  123,  437,  383,
      383,  907,  437,  147,  147, 1336,  147,  198,  198,  503,
      198, 1337,  503,  907,   88,   88,   88,   88,  105,  115,
      147,  147,  659,  660,  503,  147,  123,  161,  161,  161,
      161,  437,  105,  206,  206, 1338,  206,  123,  161,  426,

      426,  426,  426,  105,  161,  105,  105,  659,  660,  161,
      105,  105,  211,  211,  147,  211,  105,  105,  105,  105,
      105,  105,  975,  215,  215,  147,  215,  542,  105,  198,
      105,  105,  406,  406,  662,  105,  105,  406,  975,  542,
     1007,  105,  105,  105,  105,  105,  105,  106,  106,  106,
      106, 1340, 1007,  155,  155,  206,  155,  106,  155,  662,
     1344,  158,  158,  158,  158,  106,  406,  106, 1346,  106,
      155,  155,  158,  641,  211,  155,  641,  542,  158,  155,
      158,  158,  158,  158, 1356,  215,  166,  166,  166,  166,
      218,  218,  106,  218,  341,  341,  106,  341,  704,  106,

      106,  704, 1357,  166,  155,  166,  166,  166,  166,  452,
      452,  106,  452,  342,  342,  155,  342, 1358,  106, 1361,
      106,  106,  108,  108,  108,  108,  169,  169,  169,  169,
      246,  246,  108,  246,  167,  167,  167,  167, 1362,  641,
      108,  158,  108,  169,  108,  341,  475,  475,  169,  475,
      641,  167,  218,  784,  408,  408,  167, 1363,  784,  408,
      197,  197,  197,  197,  342,  663,  166,  108, 1364,  252,
      252,  108,  252,  667,  108,  108,  667, 1366,  108,  197,
      197,  197,  197,  375,  411,  411,  108,  375,  408,  411,
      663, 1367,  246,  108,  664,  108,  108,  150,  150,  667,

      150,  150,  150,  150,  782,  150,  150,  782,  150,  150,
      150,  150, 1368,  150,  167,  150,  150, 1369,  411,  664,
      150,  150,  150,  150,  150,  150,  375, 1370, 1371,  189,
      189,  252,  189,  411,  665,  200,  200,  200,  200,  201,
      201,  201,  201,  375, 1372, 1373,  189,  189,  150,  150,
      150,  189,  200,  375, 1374,  724,  201,  200,  724,  665,
     1375,  201,  202,  202,  202,  202,  724, 1376,  203,  203,
      203,  203, 1377,  666, 1378,  150,  150,  150,  150,  202,
      189,  202,  202,  202,  202,  203,  205,  205,  205,  205,
      203,  189,  226,  226,  226,  226,  269,  269,  666,  269,

     1379,  273,  273,  205,  273,  668,  338,  360,  205,  338,
      226,  360,  226,  360,  226,  279,  279, 1380,  279,  282,
      282, 1381,  282,  328,  328,  364,  328,  359,  364,  449,
      668,  359,  360,  449,  338,  671,  360,  226,  360,  672,
      359, 1382,  202,  432,  432,  432,  432,  384,  203, 1383,
      384,  364,  359,  673,  364,  674,  359,  338,  269, 1384,
      671, 1385,  449,  273,  672,  359,  226,  227,  227,  364,
      227,  357, 1386,  227,  227,  227,  227,  279,  673,  364,
      674,  282,  357,  357,  357,  328,  386,  481,  481,  386,
      481,  227, 1387,  227,  364,  227,  357,  380,  384,  380,

      380,  675,  380,  380,  380,  436,  436,  357,  357,  357,
      436,  380,  725,  384,  381,  725,  381,  381,  227,  381,
      381,  381,  387,  725,  384,  387,  675,  385,  381,  227,
      385, 1388,  486,  486,  385,  486,  380,  386,  385,  436,
      394,  669,  396,  394,  669,  396, 1389,  227,  339,  339,
      339,  339,  386,  381,  438,  438,  394,  497,  396,  438,
     1390,  497,  394,  386,  396, 1391,  339,  669,  339,  402,
      339,  682,  402,  387,  682, 1393,  403,  385,  385,  403,
      397,  397, 1394,  397,  785,  402, 1395, 1396,  438,  387,
      497,  402,  403,  339,  385, 1397,  397,  339,  403,  387,

      339,  339,  397,  797,  385, 1398,  441,  441,  397,  785,
      803,  441,  339,  803,  389, 1399, 1400,  389,  394,  339,
      396,  339,  339,  340,  340,  340,  340,  389,  389,  763,
      389,  389,  763, 1401,  389,  389,  389, 1402, 1403,  682,
      441,  340,  389,  340,  806,  340,  797,  402,  682,  420,
      420,  420,  420,  807,  403,  441,  491,  491,  397,  491,
      423,  423,  423,  423, 1404,  389,  420,  815,  340,  806,
      815,  420,  340,  797, 1405,  340,  340,  423,  807,  340,
      499,  499,  423,  499,  423, 1406, 1407,  340,  462,  462,
      462,  462,  389,  815,  340,  763,  340,  340,  353,  510,

      510,  353,  510,  353,  353,  353,  353,  353,  353,  353,
      353,  353,  353,  353,  353,  353,  353,  353,  353,  353,
      353,  353,  353,  353,  353,  353,  353,  353,  353,  353,
      353,  353,  353,  353,  353,  353,  353,  353,  353,  353,
      353,  353,  353,  353,  353,  353,  353,  353,  353,  353,
      353,  353,  353,  353,  353,  353,  353,  353,  353,  353,
      353,  353,  353,  353,  353,  353,  353,  353,  353,  353,
      353,  353,  353,  353,  353,  353,  353,  353,  353,  353,
      353,  353,  372,  521,  521,  372,  521,  808,  372,  372,
      372,  372,  421,  421,  421,  421,  424,  424,  424,  424,

      427,  427,  427,  427,  528,  528,  372,  528,  372,  421,
      372, 1408,  808,  424,  421, 1410,  822,  427,  424,  822,
      424, 1419,  427,  428,  428,  428,  428,  533,  533,  448,
      533,  450, 1420,  372,  455,  455,  455,  455, 1421, 1424,
      428,  448,  448,  450,  450,  428,  448,  428,  450, 1425,
      448,  455,  450, 1426,  809, 1427,  455,  454,  810,  372,
     1429,  372,  372,  465,  465,  465,  465, 1430,  692,  454,
      454,  692,  421,  811,  454,  448,  812,  450,  454,  809,
      427,  444,  444,  810,  444,  444,  444,  444,  826,  444,
      444,  826,  444,  444,  444,  444, 1431,  444,  811,  444,

      444,  812, 1432,  454,  444,  444,  444,  444,  444,  444,
     1279, 1279, 1279,  456,  456,  456,  456, 1433,  454,  692,
      458,  458,  458,  458,  467,  467,  467,  467, 1434, 1435,
      456,  458,  444,  444,  444,  456,  692,  458, 1436,  496,
      496,  467,  458, 1437,  496,  692,  467, 1438,  463,  463,
      463,  463,  472,  472,  472,  472, 1439, 1440,  813,  444,
      444,  444,  444,  445,  445,  463,  445,  445,  445,  445,
      463,  445,  445,  496,  445,  445,  445,  445, 1441,  445,
     1442,  445,  445,  813, 1443, 1444,  445,  445,  445,  445,
      445,  445, 1445,  456, 1446,  459,  459,  459,  459, 1447,

     1448,  816,  461,  461,  461,  461,  459,  478,  478,  478,
      478, 1449,  459,  461,  445,  445,  445,  459, 1450,  461,
      498,  498, 1451, 1454,  461,  498,  816,  818,  463,  464,
      464,  464,  464,  468,  468,  468,  468, 1455, 1456, 1457,
      464,  445,  445,  445,  445,  699,  464,  699,  699,  699,
      468,  464,  818, 1458,  498,  468,  470,  470,  470,  470,
      471,  471,  471,  471,  473,  473,  473,  473,  474,  474,
      474,  474, 1459,  470,  501,  501, 1460,  471,  470,  501,
      900,  473,  471,  900,  932,  474,  473,  932,  537,  537,
      474,  537,  506,  506,  506,  506,  507,  507,  507,  507,

      508,  508,  508,  508,  518,  518,  518,  518,  501,  513,
      513,  513,  513,  468,  506,  507,  507,  507,  507,  508,
      508,  508,  508,  501, 1461, 1462,  513,  524,  524,  524,
      524,  513,  514,  514,  514,  514,  516,  516,  516,  516,
      517,  517,  517,  517,  473,  548,  548,  798,  548,  514,
      798, 1463,  683,  516,  514,  683,  687,  517,  516,  687,
     1464,  819,  517,  519,  519,  519,  519,  520,  520,  520,
      520,  564,  564, 1465,  564,  570,  570,  802,  570,  802,
      519,  802,  802, 1466,  520,  519,  819,  573,  573,  520,
      573,  587,  587,  802,  587,  591,  591, 1467,  591,  595,

      595,  820,  595,  598,  598, 1468,  598,  633,  633,  683,
      633,  919,  514,  661,  661,  661,  661,  921,  798,  711,
      711,  711,  711,  922,  798,  687,  820, 1470,  978,  683,
      916,  978,  916,  687,  916,  916,  919, 1084,  573, 1479,
     1084, 1480,  921,  519,  651,  711,  916,  651,  922,  651,
      651,  651,  651,  651,  651,  651,  651,  651,  651,  651,
      651,  651,  651,  651,  651,  651,  651,  651,  651,  651,
      651,  651,  651,  651,  651,  651,  651,  651,  651,  651,
      651,  651,  651,  651,  651,  651,  651,  651,  651,  651,
      651,  651,  651,  651,  651,  651,  651,  651,  651,  651,

      651,  651,  651,  651,  651,  651,  651,  651,  651,  651,
      651,  651,  651,  651,  651,  651,  651,  651,  651,  651,
      651,  651,  651,  651,  651,  651,  651,  651,  678,  705,
      705,  678, 1481,  689,  705,  678,  689, 1484,  706,  706,
      923, 1247,  817,  706, 1247,  817, 1485,  693,  697,  697,
      693,  697,  715,  715, 1486, 1487, 1489,  715,  924,  700,
      700, 1490,  700,  705,  697,  923,  702,  702,  817,  702,
      697,  694,  706, 1491,  694,  700,  695,  696,  678,  695,
      696,  700,  702,  924, 1492, 1493,  715,  827,  702, 1392,
      827, 1494, 1392, 1495,  702,  716,  716, 1496,  693, 1497,

      716, 1498,  689, 1499,  693,  678,  688,  688, 1500,  688,
      689,  688,  688,  688,  688,  688,  688,  688,  688,  688,
      688,  688,  694,  688,  693,  688,  697,  695,  696,  716,
      688,  688,  688,  688,  688,  688, 1501,  700,  707,  707,
      694,  827,  828,  707,  702,  828,  696,  695,  694,  703,
      703,  926,  703,  695,  696, 1502, 1503,  688,  688,  688,
     1453,  717,  717, 1453,  827,  703,  717,  712,  712,  712,
      712,  703,  707,  731,  731,  929,  926, 1504,  731,  845,
      845,  845,  845,  930,  688,  688,  688,  688,  688,  688,
     1505,  912,  707,  712,  912,  717,  931,  720, 1506,  721,

      929,  732,  732, 1507,  828,  845,  732,  731,  930,  720,
      720,  721,  721, 1015,  720,  717,  721, 1510,  720,  828,
      721,  931, 1511,  834, 1512, 1017,  834,  703,  719,  719,
     1513,  719,  719,  719,  719,  732,  719,  719, 1015,  719,
      719,  719,  719,  720,  719,  721,  719,  719,  722,  912,
     1017,  719,  719,  719,  719,  719,  719,  733,  733, 1514,
      722,  722,  733,  829, 1508,  722,  829, 1508,  912,  722,
      737,  737,  737,  737,  834, 1515, 1516,  834, 1517,  719,
      719,  719,  735,  735,  735,  735,  832,  836, 1518,  832,
      836,  733,  737, 1519,  722, 1520,  736,  736,  736,  736,

      834,  735,  735,  735,  735, 1018,  719,  719,  719,  719,
      835,  733, 1019,  835,  722,  736,  736,  736,  736,  829,
      837, 1521, 1522,  837,  838, 1523,  935,  838,  933,  935,
     1018,  933, 1524,  847,  847,  847,  847, 1019,  836, 1526,
      829,  831,  831,  836,  831, 1534,  831,  831,  831,  831,
      831,  831,  831,  831,  831,  831,  831,  832,  831,  847,
      831,  835, 1535,  832,  836,  831,  831,  831,  831,  831,
      831,  837,  835,  925,  927,  838,  925,  927,  837, 1536,
      839,  839,  937,  839,  935,  937, 1539,  835,  840,  840,
     1540,  840,  831,  831,  831,  838,  839,  837,  933,  925,

      927,  838,  839,  935,  840,  933, 1541, 1020,  842,  842,
      840,  841,  841,  842,  841,  860,  860,  860,  860,  831,
      831,  831,  831,  831,  831, 1021, 1542,  841, 1021,  849,
      849,  852, 1020,  841,  849,  858,  858,  860, 1025,  841,
      858, 1025,  842,  852,  852,  945,  945, 1544,  852,  842,
      945, 1021,  852,  861,  861,  861,  861,  934,  839,  937,
      934, 1023, 1528,  849, 1025, 1528,  840, 1545,  938,  858,
      849,  938,  861,  861,  861,  861,  858,  852,  939,  945,
      940,  939,  941,  940,  852,  941, 1023,  949,  949,  841,
      850,  850,  949,  850,  850,  850,  850,  945,  850,  850,

     1026,  850,  850,  850,  850, 1546,  850, 1547,  850,  850,
     1548, 1549, 1027,  850,  850,  850,  850,  850,  850,  876,
      876,  949, 1550,  934,  876, 1026, 1551,  876,  876,  939,
      938,  940,  876,  941,  934,  876,  876, 1027,  876,  949,
      941,  850,  850,  850, 1028,  938,  940, 1028,  939, 1109,
      942,  943, 1552,  942,  943,  939, 1553,  940, 1554,  941,
      955,  955, 1110, 1555, 1111,  955, 1556, 1112,  850,  850,
      850,  850,  851,  851, 1109,  851,  851,  851,  851, 1030,
      851,  851, 1030,  851,  851,  851,  851, 1110,  851, 1111,
      851,  851, 1112, 1115,  955,  851,  851,  851,  851,  851,

      851,  942,  943, 1011,  944,  944, 1011,  944, 1029, 1557,
     1116, 1029,  955,  943, 1028, 1558, 1559,  950, 1115,  942,
      944, 1028, 1560,  851,  851,  851,  944,  942,  943,  950,
      950, 1561, 1030, 1032,  950, 1116, 1032, 1192,  950,  957,
      957,  957,  957, 1563, 1193,  958,  958,  958,  958, 1564,
      851,  851,  851,  851, 1033, 1565, 1030, 1033,  957,  957,
      957,  957, 1192,  950,  958,  958,  958,  958, 1034, 1193,
     1035, 1034, 1011, 1035, 1036, 1037, 1566, 1036, 1037, 1029,
     1011,  950,  944, 1043, 1567, 1029, 1038, 1038, 1042, 1042,
     1032, 1038, 1568, 1042, 1106, 1043, 1043, 1106, 1118, 1119,

     1043, 1118, 1119, 1569, 1043, 1033, 1120, 1048, 1048, 1120,
     1032, 1121, 1048, 1122, 1121, 1124, 1122, 1570, 1124, 1034,
     1038, 1035, 1042, 1035, 1033, 1036, 1037, 1114, 1571, 1043,
     1114, 1033, 1037, 1123, 1572, 1038, 1123, 1042, 1573, 1034,
     1036, 1048, 1574, 1125, 1043, 1034, 1125, 1035, 1575, 1576,
     1577, 1036, 1037, 1114, 1579, 1126, 1048, 1119, 1126, 1585,
     1106, 1586, 1127, 1127, 1122, 1189, 1124, 1127, 1189, 1199,
     1118, 1106, 1199, 1120, 1587, 1118, 1119, 1195, 1196, 1590,
     1195, 1196, 1124, 1120, 1123, 1122, 1200, 1591, 1121, 1200,
     1122, 1123, 1124, 1592, 1125, 1132, 1127, 1125, 1593, 1127,

     1131, 1131, 1595, 1195, 1196, 1131, 1126, 1132, 1132, 1596,
     1123, 1597, 1132, 1137, 1137, 1598, 1132, 1599, 1137, 1189,
     1125, 1201, 1203, 1204, 1201, 1203, 1204, 1562, 1581, 1600,
     1562, 1581, 1126, 1202, 1131, 1199, 1202, 1131, 1601, 1602,
     1205, 1132, 1189, 1205, 1132, 1206, 1199, 1137, 1206, 1603,
     1137, 1604, 1202, 1202, 1202, 1200, 1207, 1207, 1605, 1276,
     1606, 1207, 1276, 1200, 1212, 1607, 1264, 1211, 1211, 1264,
     1608, 1609, 1211, 1203, 1204, 1277, 1212, 1212, 1277, 1217,
     1217, 1212, 1610, 1278, 1217, 1212, 1278, 1611, 1203, 1612,
     1207, 1205, 1204, 1201, 1270, 1614, 1206, 1270, 1201, 1203,

     1204, 1211, 1272, 1207, 1280, 1272, 1615, 1280, 1281, 1206,
     1212, 1281, 1205, 1217, 1211, 1282, 1276, 1205, 1282, 1616,
     1270, 1617, 1206, 1212, 1283, 1618, 1217, 1283, 1272, 1339,
     1264, 1619, 1339, 1284, 1284, 1620, 1276, 1348, 1284, 1345,
     1348, 1277, 1345, 1264, 1288, 1288, 1621, 1347, 1622, 1288,
     1347, 1289, 1277, 1349, 1278, 1280, 1349, 1294, 1294, 1281,
     1278, 1280, 1294, 1289, 1289, 1345, 1282, 1284, 1289, 1284,
     1623, 1624, 1289, 1347, 1281, 1283, 1350, 1283, 1288, 1350,
     1288, 1280, 1339, 1625, 1351, 1281, 1282, 1351, 1626, 1355,
     1355, 1294, 1282, 1294, 1355, 1352, 1627, 1289, 1352, 1289,

     1409, 1283, 1629, 1409, 1348, 1353, 1339, 1349, 1353, 1634,
     1613, 1635, 1354, 1613, 1348, 1354, 1360, 1636, 1639, 1412,
     1359, 1359, 1412, 1355, 1411, 1359, 1640, 1411, 1360, 1360,
     1349, 1413, 1641, 1360, 1413, 1351, 1355, 1360, 1642, 1414,
     1365, 1365, 1414, 1644, 1350, 1365, 1352, 1415, 1645, 1352,
     1415, 1351, 1646, 1350, 1359, 1416, 1353, 1471, 1416, 1647,
     1471, 1351, 1360, 1354, 1409, 1648, 1417, 1359, 1469, 1417,
     1649, 1469, 1352, 1353, 1365, 1360, 1354, 1409, 1472, 1650,
     1411, 1472, 1353, 1412, 1651, 1473, 1652, 1365, 1473, 1354,
     1414, 1475, 1418, 1418, 1475, 1414, 1412, 1418, 1415, 1422,

     1422, 1411, 1423, 1413, 1422, 1653, 1416, 1474, 1413, 1476,
     1474, 1415, 1476, 1654, 1423, 1423, 1414, 1417, 1655, 1423,
     1428, 1428, 1656, 1423, 1415, 1428, 1418, 1416, 1417, 1657,
     1469, 1471, 1416, 1422, 1471, 1525, 1477, 1418, 1525, 1477,
     1658, 1659, 1475, 1417, 1422, 1469, 1529, 1660, 1423, 1529,
     1527, 1662, 1663, 1527, 1428, 1472, 1473, 1664, 1474, 1423,
     1476, 1665, 1473, 1666, 1667, 1428, 1478, 1478, 1475, 1482,
     1482, 1478, 1488, 1488, 1482, 1530, 1483, 1488, 1530, 1531,
     1476, 1474, 1531, 1668, 1474, 1669, 1476, 1477, 1483, 1483,
     1670, 1532, 1580, 1483, 1532, 1580, 1578, 1483, 1671, 1578,

     1478, 1525, 1477, 1482, 1527, 1672, 1488, 1673, 1582, 1533,
     1533, 1582, 1525, 1477, 1533, 1478, 1674, 1675, 1482, 1537,
     1537, 1488, 1483, 1529, 1537, 1677, 1530, 1527, 1699, 1530,
     1531, 1543, 1543, 1700, 1538, 1583, 1543, 1483, 1583, 1725,
     1584, 1584, 1532, 1533, 1726, 1584, 1538, 1538, 1310, 1532,
     1533, 1538, 1530, 1537, 1578, 1538, 1531, 1588, 1588, 1582,
     1537, 1580, 1588, 1628, 1630, 1543, 1628, 1630, 1532, 1580,
     1739, 1589, 1543, 1578, 1584, 1309, 1308, 1582, 1584, 1678,
     1538, 1739, 1678, 1589, 1589, 1582, 1583, 1538, 1589, 1733,
     1583, 1588, 1589, 1594, 1594, 1588, 1631, 1632, 1594, 1631,

     1632, 1633, 1633, 1637, 1637, 1729, 1633, 1733, 1637, 1643,
     1643, 1638, 1583, 1676, 1643, 1307, 1676, 1589, 1628, 1679,
     1729, 1589, 1679, 1638, 1638, 1736, 1722, 1594, 1638, 1722,
     1630, 1594, 1638, 1680, 1680, 1633, 1680, 1637, 1736, 1723,
     1628, 1630, 1723, 1643, 1681, 1681, 1742, 1631, 1632, 1681,
     1742, 1724, 1724, 1633, 1724, 1637, 1678, 1638, 1685, 1685,
     1306, 1643, 1631, 1685, 1691, 1691, 1632, 1731, 1686, 1691,
     1679, 1305, 1304, 1631, 1632, 1638, 1728, 1303, 1681, 1728,
     1686, 1686, 1676, 1302, 1680, 1686, 1732, 1731, 1301, 1686,
     1676, 1734, 1685, 1732, 1735, 1738, 1679, 1735, 1691, 1737,

     1740, 1737, 1724, 1722, 1741, 1743, 1734, 1300, 1738, 1299,
     1680, 1741, 1298, 1297, 1686, 1740, 1744, 1744, 1843, 1744,
     1296, 1842, 1295, 1743, 1842, 1842, 1842, 1911, 1843, 1293,
     1842, 1843, 1843, 1843, 1928, 1925, 1292, 1911, 1925, 1925,
     1925, 1911, 1911, 1291, 1928, 1290, 1955, 1928, 1928, 1928,
     1929, 1287, 1286, 1929, 1929, 1929, 1955, 1285, 1269, 1964,
     1955, 1955, 1964, 1964, 1964, 1268, 1267, 1744, 1746, 1746,
     1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746,
     1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746,
     1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746,

     1746, 1746, 1746, 1746, 1746, 1747, 1747, 1747, 1747, 1747,
     1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
     1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
     1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747,
     1747, 1747, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748,
     1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748,
     1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748,
     1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1749,
     1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
     1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,

     1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
     1749, 1749, 1749, 1749, 1749, 1749, 1750, 1750, 1750, 1750,
     1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
     1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
     1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750,
     1750, 1750, 1750, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
     1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
     1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
     1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751,
     1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,

     1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
     1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752,
     1752, 1752, 1752, 1752, 1752, 1752, 1752, 1753, 1753, 1753,
     1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753,
     1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753,
     1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753,
     1753, 1753, 1753, 1753, 1754, 1754, 1754, 1754, 1754, 1754,
     1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754,
     1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754,
     1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754,

     1754, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755,
     1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755,
     1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755,
     1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1756, 1756,
     1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756,
     1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756,
     1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756,
     1756, 1756, 1756, 1756, 1756, 1757, 1757, 1757, 1757, 1757,
     1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
     1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,

     1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757,
     1757, 1757, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758,
     1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758,
     1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758,
     1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1759,
     1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759,
     1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759,
     1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759,
     1759, 1759, 1759, 1759, 1759, 1759, 1760, 1760, 1760, 1760,
     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,

     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
     1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760,
     1760, 1760, 1760, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
     1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
     1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
     1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
     1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762,
     1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762,
     1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762,
     1762, 1762, 1762, 1762, 1762, 1762, 1762, 1763, 1763, 1763,

     1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763,
     1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763,
     1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763,
     1763, 1763, 1763, 1763, 1764, 1764, 1764, 1764, 1764, 1764,
     1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764,
     1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764,
     1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764,
     1764, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765,
     1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765,
     1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765,

     1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1766, 1766,
     1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766,
     1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766,
     1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766,
     1766, 1766, 1766, 1766, 1766, 1767, 1767, 1767, 1767, 1767,
     1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
     1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
     1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
     1767, 1767, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
     1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,

     1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768,
     1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1769,
     1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769,
     1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769,
     1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769,
     1769, 1769, 1769, 1769, 1769, 1769, 1770, 1770, 1770, 1770,
     1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770,
     1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770,
     1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770,
     1770, 1770, 1770, 1771, 1771, 1771, 1771, 1771, 1771, 1771,

     1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771,
     1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771,
     1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771,
     1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
     1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
     1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772,
     1772, 1772, 1772, 1772, 1772, 1772, 1772, 1773, 1773, 1265,
     1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773,
     1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773,
     1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773,

     1773, 1773, 1773, 1773, 1774, 1968, 1968, 1263, 1968, 1968,
     1968, 1981, 1262, 1261, 1981, 1981, 1981, 1260, 1259, 1258,
     1257, 1981, 1256, 1774, 1255, 1254, 1774, 1774, 1774, 1253,
     1252, 1251, 1250, 1774, 1775, 1249, 1775, 1775, 1982, 1775,
     1248, 1982, 1982, 1982, 1246, 1775, 1775, 1245, 1982, 1775,
     1775, 1775, 1776, 1244, 1776, 1776, 1776, 1776, 1242, 1776,
     1776, 1776, 1241, 1240, 1239, 1776, 1776, 1776, 1238, 1776,
     1776, 1776, 1777, 1777, 1777, 1777, 1999, 1237, 1236, 1999,
     1999, 1999, 1777, 1235, 1234, 1233, 1232, 1230, 1777, 1777,
     1229, 1777, 1777, 1777, 1228, 1777, 1777, 1777, 1777, 1227,

     1777, 1777, 1778, 1226, 1778, 1778, 1225, 1778, 1224, 1223,
     1222, 1221, 1220, 1778, 1778, 1219, 1218, 1778, 1778, 1778,
     1779, 1779, 1779, 1779, 1216, 1215, 1214, 1213, 1210, 1209,
     1779, 1208, 1198, 1197, 1191, 1190, 1779, 1779, 1188, 1779,
     1779, 1779, 1187, 1779, 1779, 1779, 1779, 1186, 1779, 1779,
     1780, 1780, 1185, 1780, 1780, 1780, 1780, 1780, 1780, 1780,
     1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780,
     1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780,
     1780, 1780, 1780, 1780, 1780, 1780, 1780, 1781, 1184, 1183,
     1781, 1182, 1181, 1180, 1179, 1781, 1178, 1781, 1781, 1781,

     1781, 1781, 1177, 1176, 1175, 1174, 1781, 1781, 1781, 1173,
     1781, 1781, 1781, 1172, 1171, 1169, 1168, 1781, 1782, 1164,
     1163, 1162, 1161, 1160, 1159, 1158, 1156, 1155, 1782, 1154,
     1782, 1782, 1153, 1151, 1150, 1149, 1148, 1782, 1147, 1146,
     1782, 1782, 1782, 1145, 1144, 1143, 1142, 1782, 1783, 1783,
     1783, 1783, 1141, 1140, 1783, 1139, 1138, 1136, 1135, 1134,
     1133, 1130, 1129, 1128, 1783, 1113, 1783, 1783, 1108, 1783,
     1107, 1105, 1104, 1783, 1103, 1102, 1783, 1783, 1783, 1101,
     1100, 1099, 1783, 1783, 1784, 1784, 1784, 1784, 1097, 1096,
     1784, 1095, 1094, 1093, 1092, 1091, 1090, 1089, 1088, 1087,

     1784, 1086, 1085, 1784, 1083, 1081, 1078, 1076, 1075, 1784,
     1074, 1073, 1784, 1784, 1784, 1072, 1071, 1070, 1784, 1784,
     1785, 1785, 1785, 1785, 1069, 1068, 1785, 1067, 1066, 1065,
     1064, 1062, 1061, 1060, 1059, 1058, 1785, 1057, 1785, 1785,
     1056, 1785, 1055, 1054, 1052, 1785, 1051, 1050, 1785, 1785,
     1785, 1049, 1047, 1046, 1045, 1785, 1786, 1786, 1786, 1786,
     1044, 1041, 1786, 1040, 1039, 1024, 1014, 1013, 1012, 1010,
     1009, 1008, 1006, 1005, 1003, 1002, 1001, 1000,  999,  998,
      997, 1786,  996,  995, 1786, 1786, 1786,  994,  993,  991,
      990, 1786, 1787, 1787,  989, 1787, 1787, 1787, 1787, 1787,

     1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787,
     1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787,
     1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1788,
      987,  986, 1788,  985,  984,  983,  982, 1788,  981, 1788,
     1788, 1788, 1788, 1788,  980,  979,  977,  976, 1788, 1788,
     1788,  974, 1788, 1788, 1788,  973,  972,  971,  970, 1788,
     1789, 1789,  969, 1789, 1789, 1789, 1789, 1789, 1789, 1789,
     1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789,
     1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789,
     1789, 1789, 1789, 1789, 1789, 1789, 1789, 1790, 1790,  968,

      967, 1790,  966,  965,  964,  963, 1790,  962, 1790, 1790,
     1790, 1790, 1790,  961,  960, 1790,  959, 1790, 1790, 1790,
      956, 1790, 1790, 1790,  954,  953,  952,  951, 1790, 1791,
     1791, 1791, 1791,  948,  947, 1791,  946,  936,  920, 1791,
      918,  915,  913,  911,  910, 1791,  909, 1791, 1791,  908,
      906,  905,  901,  899, 1791,  898,  897, 1791, 1791, 1791,
      896,  895,  894, 1791, 1791, 1792, 1792, 1792, 1792,  893,
      892, 1792,  891,  890,  889,  888,  886,  885,  884,  882,
      881, 1792,  880,  879, 1792,  878,  877,  875,  874,  873,
     1792,  872,  870, 1792, 1792, 1792,  869,  868,  867, 1792,

     1792, 1793, 1793, 1793, 1793,  866,  865, 1793,  864,  863,
      862, 1793,  859,  857,  856,  855,  854, 1793,  848, 1793,
     1793,  844,  843,  833,  830,  825, 1793,  814,  805, 1793,
     1793, 1793,  800,  799,  795,  794, 1793, 1794, 1794, 1794,
     1794,  793,  792, 1794,  788,  786,  783,  781,  780,  775,
      773,  771,  770,  769,  768,  767,  766,  765,  764,  762,
      761,  760, 1794,  759,  758, 1794, 1794, 1794,  757,  756,
      755,  754, 1794, 1795, 1795, 1795, 1795,  753,  752, 1795,
      751,  750,  749,  747,  746,  745,  744,  743,  742, 1795,
      741, 1795, 1795,  739,  738,  734,  730,  729, 1795,  728,

      726, 1795, 1795, 1795,  723,  714,  713, 1795, 1795, 1796,
     1796, 1796, 1796,  710,  708, 1796,  681,  676,  656,  655,
      653,  652,  650,  647,  645, 1796,  643,  642, 1796,  640,
      639,  638,  635,  631, 1796,  629,  627, 1796, 1796, 1796,
      624,  622,  620, 1796, 1796, 1797, 1797, 1797, 1797,  618,
      617, 1797,  614,  611,  610,  608,  607,  604,  603,  600,
      597, 1797,  593, 1797, 1797,  589,  584,  583,  582,  579,
     1797,  576,  575, 1797, 1797, 1797,  572,  566,  563,  562,
     1797, 1798, 1798, 1798, 1798,  558,  556, 1798,  555,  553,
      551,  550,  544,  541,  539,  535,  532,  531,  530,  526,

      523,  515,  512,  509,  505,  494, 1798,  493,  489, 1798,
     1798, 1798,  488,  484,  483,  477, 1798, 1799,  469,  457,
     1799,  451,  446,  442,  434,  433,  431, 1799,  422,  419,
     1799, 1799, 1799,  416,  413,  404,  388, 1799, 1800, 1800,
      376, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800,
     1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800,
     1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800,
     1800, 1800, 1800, 1800, 1800, 1801, 1801,  374, 1801, 1801,
     1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801,
     1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801,

     1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801,
     1801, 1801, 1802, 1802,  373, 1802, 1802, 1802, 1802, 1802,
     1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802,
     1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802,
     1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1803,
      370,  354, 1803,  347,  346,  344,  343, 1803,  337, 1803,
     1803, 1803, 1803, 1803,  336,  322,  321,  316, 1803, 1803,
     1803,  312, 1803, 1803, 1803,  308,  307,  306,  303, 1803,
     1804,  302,  299, 1804,  295,  294, 1804,  293,  290,  286,
      256,  242,  241,  240, 1804,  236,  235,  231, 1804,  225,

      222,  214,  210,  204,  194, 1804,  186,  182, 1804, 1804,
     1804,  178,  168,  160,  146, 1804, 1805, 1805, 1805, 1805,
      143,  137, 1805,  120,  110,  102,  100,   95,    0,    0,
        0,    0,    0,    0, 1805, 1805,    0,    0,    0,    0,
        0, 1805,    0,    0, 1805, 1805, 1805,    0,    0,    0,
        0, 1805, 1806, 1806, 1806, 1806,    0,    0, 1806,    0,
        0,    0,    0,    0,    0,    0,    0,    0, 1806,    0,
     1806, 1806,    0,    0,    0,    0,    0, 1806,    0,    0,
     1806, 1806, 1806,    0,    0,    0, 1806, 1806, 1807, 1807,
     1807, 1807,    0,    0, 1807,    0,    0,    0,    0,    0,

        0,    0,    0,    0, 1807,    0,    0, 1807,    0,    0,
        0,    0,    0, 1807,    0,    0, 1807, 1807, 1807,    0,
        0,    0, 1807, 1807, 1808, 1808, 1808, 1808,    0,    0,
     1808,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     1808,    0, 1808, 1808,    0,    0,    0,    0,    0, 1808,
        0,    0, 1808, 1808, 1808,    0,    0,    0,    0, 1808,
     1809, 1809, 1809, 1809,    0,    0, 1809,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0, 1809,    0,    0, 1809, 1809,
     1809,    0,    0,    0,    0, 1809, 1810,    0,    0,    0,

        0,    0,    0,    0,    0,    0, 1810,    0, 1810,    0,
        0,    0,    0,    0,    0, 1810,    0,    0, 1810, 1810,
     1810,    0,    0,    0,    0, 1810, 1811, 1811,    0, 1811,
        0,    0,    0,    0,    0,    0, 1811,    0,    0, 1811,
     1811, 1811,    0,    0,    0,    0, 1811, 1812, 1812,    0,
     1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812,
     1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812,
     1812, 1812, 1812, 1812,    0, 1812, 1812, 1812, 1812, 1812,
     1812, 1812, 1812, 1812, 1813,    0,    0, 1813,    0,    0,
        0,    0,    0,    0, 1813,    0,    0, 1813, 1813, 1813,

        0,    0,    0,    0, 1813, 1814, 1814, 1814, 1814, 1814,
     1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814,
     1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814,
        0, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814,
     1814, 1814, 1815, 1815,    0, 1815, 1815, 1815, 1815, 1815,
     1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
     1815, 1815, 1815, 1815, 1815, 1815, 1815,    0, 1815, 1815,
     1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1816,
        0,    0, 1816,    0,    0,    0,    0,    0,    0, 1816,
        0,    0, 1816, 1816, 1816,    0,    0,    0,    0, 1816,

     1817, 1817,    0, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
     1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
     1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
     1817, 1817, 1817, 1817, 1817, 1817, 1817, 1818, 1818,    0,
     1818,    0, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818,
        0, 1818, 1818, 1818, 1818,    0, 1818, 1818, 1818, 1818,
     1818, 1818,    0, 1818,    0, 1818, 1818, 1818, 1818, 1818,
     1818, 1818, 1818, 1818, 1819,    0,    0, 1819,    0,    0,
        0,    0,    0,    0, 1819,    0,    0,    0,    0, 1819,
     1819,    0, 1819,    0,    0,    0,    0,    0,    0, 1819,

        0,    0, 1819, 1819, 1819, 1820, 1820,    0, 1820,    0,
     1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820,
     1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820,
        0, 1820,    0, 1820, 1820, 1820, 1820, 1820, 1820, 1820,
     1820, 1820, 1821, 1821,    0, 1821,    0, 1821, 1821, 1821,
     1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821,
     1821, 1821, 1821, 1821, 1821, 1821, 1821,    0, 1821,    0,
     1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1822,
        0,    0, 1822,    0,    0,    0,    0,    0,    0, 1822,
        0,    0, 1822, 1822, 1822,    0,    0,    0,    0, 1822,

     1823, 1823,    0, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
     1823,    0,    0, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
     1823, 1823, 1823, 1823, 1823,    0, 1823,    0, 1823, 1823,
     1823, 1823, 1823, 1823, 1823, 1823, 1823, 1824,    0,    0,
        0,    0,    0,    0,    0,    0,    0, 1824,    0, 1824,
     1824,    0,    0,    0,    0,    0, 1824,    0,    0, 1824,
     1824, 1824,    0,    0,    0,    0, 1824, 1825,    0,    0,
        0,    0,    0,    0,    0,    0,    0, 1825,    0, 1825,
     1825,    0,    0,    0,    0,    0, 1825,    0,    0, 1825,
     1825, 1825,    0,    0,    0,    0, 1825, 1826, 1826,    0,

     1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826,
     1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826,
     1826, 1826,    0, 1826,    0, 1826, 1826, 1826, 1826, 1826,
     1826, 1826, 1826, 1826, 1827,    0,    0, 1827,    0,    0,
        0,    0,    0,    0, 1827,    0,    0, 1827, 1827, 1827,
        0,    0,    0,    0, 1827, 1828, 1828,    0, 1828, 1828,
     1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828,
     1828,    0, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828,
     1828, 1828,    0, 1828, 1828, 1828, 1828, 1828, 1828, 1828,
     1828, 1828, 1829, 1829,    0, 1829, 1829, 1829, 1829, 1829,

     1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829,
     1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829,
     1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1830,
     1830,    0, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
     1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
     1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830,
     1830, 1830, 1830, 1830, 1830, 1830, 1831, 1831,    0, 1831,
     1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831,    0,
     1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831,
     1831,    0, 1831,    0, 1831, 1831, 1831, 1831, 1831, 1831,

     1831, 1831, 1831, 1832,    0,    0, 1832,    0,    0,    0,
        0, 1832,    0, 1832,    0,    0, 1832, 1832, 1832,    0,
        0,    0,    0, 1832, 1833,    0, 1833, 1833, 1833, 1833,
     1833,    0,    0,    0, 1833,    0, 1833,    0,    0, 1833,
     1833, 1833,    0,    0,    0,    0, 1833, 1834, 1834,    0,
     1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834,    0,    0,
     1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834,
     1834, 1834,    0, 1834,    0, 1834, 1834, 1834, 1834, 1834,
     1834, 1834, 1834, 1834, 1835, 1835, 1835, 1835, 1835, 1835,
     1835, 1835, 1835, 1835, 1835,    0,    0, 1835, 1835, 1835,

     1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
     1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835,
     1835, 1836, 1836,    0, 1836, 1836, 1836, 1836, 1836, 1836,
        0, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836,
     1836, 1836, 1836,    0,    0, 1836, 1836, 1836,    0,    0,
     1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1837, 1837,
     1837, 1837,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0, 1837, 1837,    0, 1837, 1837, 1837,
        0, 1837, 1837, 1837, 1837,    0, 1837, 1837, 1838, 1838,
        0, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838,

     1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838,
     1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838,
     1838, 1838, 1838, 1838, 1838, 1839,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0, 1839, 1839,    0,
        0,    0,    0,    0, 1839,    0,    0, 1839, 1839, 1839,
        0,    0,    0,    0, 1839, 1840,    0, 1840, 1840,    0,
     1840,    0,    0,    0,    0,    0, 1840, 1840,    0,    0,
     1840, 1840, 1840, 1841,    0,    0, 1841,    0,    0,    0,
        0,    0,    0, 1841,    0,    0, 1841, 1841, 1841, 1844,
        0, 1844, 1844,    0, 1844,    0,    0,    0,    0,    0,

     1844, 1844,    0,    0, 1844, 1844, 1844, 1845,    0,    0,
     1845,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0, 1845, 1845,    0, 1845, 1845, 1845, 1845, 1846,
     1846,    0, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
     1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
     1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846,
     1846, 1846, 1846, 1846, 1846, 1846, 1847,    0,    0, 1847,
        0,    0,    0,    0, 1847,    0, 1847, 1847, 1847, 1847,
     1847,    0,    0,    0,    0, 1847, 1847, 1847,    0, 1847,

     1847, 1847,    0,    0,    0,    0, 1847, 1848,    0,    0,
     1848,    0,    0,    0,    0, 1848,    0, 1848,    0, 1848,
     1848, 1848,    0,    0,    0,    0, 1848, 1848, 1848,    0,
     1848, 1848, 1848,    0,    0,    0,    0, 1848, 1849,    0,
        0,    0,    0,    0,    0,    0,    0,    0, 1849,    0,
     1849, 1849,    0,    0,    0,    0,    0, 1849,    0,    0,
     1849, 1849, 1849,    0,    0,    0,    0, 1849, 1850,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0, 1850,    0,    0,
     1850, 1850, 1850,    0,    0,    0,    0, 1850, 1851, 1851,

     1851, 1851,    0,    0, 1851,    0,    0,    0,    0,    0,
        0,    0,    0,    0, 1851,    0,    0, 1851,    0,    0,
        0,    0,    0, 1851,    0,    0, 1851, 1851, 1851,    0,
        0,    0, 1851, 1851, 1852, 1852, 1852, 1852,    0,    0,
     1852,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     1852,    0, 1852, 1852,    0, 1852,    0,    0,    0, 1852,
        0,    0, 1852, 1852, 1852,    0,    0,    0,    0, 1852,
     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853,
     1853, 1853, 1853,    0, 1853, 1853, 1853, 1853, 1853, 1853,

     1853, 1853, 1853, 1853, 1853, 1853, 1853, 1854, 1854, 1854,
     1854,    0,    0, 1854,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0, 1854,    0,    0, 1854, 1854, 1854,    0,    0,
        0,    0, 1854, 1855,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0, 1855,    0,    0, 1855,    0,
        0,    0, 1855,    0,    0, 1855, 1855, 1855,    0,    0,
        0,    0, 1855, 1856, 1856,    0, 1856, 1856, 1856, 1856,
     1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856,
     1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856,

     1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856,
     1857,    0,    0, 1857,    0,    0,    0,    0, 1857,    0,
     1857, 1857, 1857, 1857, 1857,    0,    0,    0,    0, 1857,
     1857, 1857,    0, 1857, 1857, 1857,    0,    0,    0,    0,
     1857, 1858,    0,    0, 1858,    0,    0,    0,    0, 1858,
        0, 1858,    0, 1858, 1858, 1858,    0,    0,    0,    0,
     1858, 1858, 1858,    0, 1858, 1858, 1858,    0,    0,    0,
        0, 1858, 1859, 1859,    0, 1859, 1859, 1859, 1859, 1859,
     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,
     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859,

     1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1860,
     1860,    0, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
     1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
     1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860,
     1860, 1860, 1860, 1860, 1860, 1860, 1861, 1861,    0,    0,
     1861,    0,    0,    0,    0, 1861,    0, 1861, 1861, 1861,
     1861, 1861,    0,    0, 1861,    0, 1861, 1861, 1861,    0,
     1861, 1861, 1861,    0,    0,    0,    0, 1861, 1862,    0,
        0, 1862,    0,    0,    0,    0, 1862,    0, 1862,    0,
     1862, 1862, 1862,    0,    0,    0,    0, 1862, 1862, 1862,

        0, 1862, 1862, 1862,    0,    0,    0,    0, 1862, 1863,
     1863, 1863, 1863,    0,    0, 1863,    0,    0,    0,    0,
        0,    0,    0,    0,    0, 1863,    0,    0, 1863,    0,
        0,    0,    0,    0, 1863,    0,    0, 1863, 1863, 1863,
        0,    0,    0, 1863, 1863, 1864, 1864, 1864, 1864,    0,
        0, 1864,    0,    0,    0, 1864,    0,    0,    0,    0,
        0, 1864,    0, 1864, 1864,    0,    0,    0,    0,    0,
     1864,    0,    0, 1864, 1864, 1864,    0,    0,    0,    0,
     1864, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865,
     1865, 1865, 1865,    0, 1865, 1865, 1865, 1865, 1865, 1865,

     1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865,
     1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1866, 1866,
     1866, 1866,    0,    0, 1866,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0, 1866,    0,    0, 1866, 1866, 1866,    0,
        0,    0,    0, 1866, 1867,    0,    0, 1867,    0,    0,
     1867,    0,    0,    0, 1867,    0,    0,    0,    0,    0,
        0,    0, 1867,    0,    0,    0,    0,    0,    0, 1867,
        0,    0, 1867, 1867, 1867,    0,    0,    0,    0, 1867,
     1868, 1868, 1868, 1868,    0,    0, 1868,    0,    0,    0,

        0,    0,    0,    0,    0,    0, 1868,    0,    0, 1868,
        0,    0,    0,    0,    0, 1868,    0,    0, 1868, 1868,
     1868,    0,    0,    0, 1868, 1868, 1869, 1869, 1869, 1869,
        0,    0, 1869,    0,    0,    0,    0,    0,    0,    0,
        0,    0, 1869,    0, 1869, 1869,    0,    0,    0,    0,
        0, 1869,    0,    0, 1869, 1869, 1869,    0,    0,    0,
        0, 1869, 1870, 1870, 1870, 1870,    0,    0, 1870,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0, 1870,    0,    0,
     1870, 1870, 1870,    0,    0,    0,    0, 1870, 1871,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     1871,    0,    0,    0,    0,    0,    0, 1871,    0,    0,
     1871, 1871, 1871,    0,    0,    0,    0, 1871, 1872,    0,
        0, 1872,    0,    0,    0,    0,    0,    0, 1872,    0,
        0, 1872, 1872, 1872,    0,    0,    0,    0, 1872, 1873,
     1873,    0, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873,
     1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873,
     1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873,
     1873, 1873, 1873, 1873, 1873, 1873, 1874, 1874,    0, 1874,
     1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874,

     1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874,
     1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874,
     1874, 1874, 1874, 1875, 1875,    0, 1875, 1875, 1875, 1875,
     1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875,
     1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875,
     1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875,
     1876,    0,    0, 1876,    0,    0,    0,    0, 1876,    0,
     1876, 1876, 1876, 1876, 1876,    0,    0,    0,    0, 1876,
     1876, 1876,    0, 1876, 1876, 1876,    0,    0,    0,    0,
     1876, 1877,    0,    0, 1877,    0,    0,    0,    0, 1877,

        0, 1877,    0, 1877, 1877, 1877,    0,    0,    0,    0,
     1877, 1877, 1877,    0, 1877, 1877, 1877,    0,    0,    0,
        0, 1877, 1878,    0,    0, 1878,    0,    0, 1878,    0,
        0,    0,    0,    0,    0,    0, 1878,    0,    0,    0,
     1878,    0,    0,    0,    0,    0,    0, 1878,    0,    0,
     1878, 1878, 1878,    0,    0,    0,    0, 1878, 1879, 1879,
     1879, 1879,    0,    0, 1879,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0, 1879, 1879,    0,    0,
        0,    0,    0, 1879,    0,    0, 1879, 1879, 1879,    0,
        0,    0,    0, 1879, 1880, 1880, 1880, 1880,    0,    0,

     1880,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0, 1880, 1880,    0,    0,    0,    0,    0, 1880,
        0,    0, 1880, 1880, 1880,    0,    0,    0,    0, 1880,
     1881, 1881, 1881, 1881,    0,    0, 1881,    0,    0,    0,
        0,    0,    0,    0,    0,    0, 1881,    0,    0, 1881,
        0,    0,    0,    0,    0, 1881,    0,    0, 1881, 1881,
     1881,    0,    0,    0, 1881, 1881, 1882, 1882, 1882, 1882,
        0,    0, 1882,    0,    0,    0,    0,    0,    0,    0,
        0,    0, 1882,    0, 1882, 1882,    0,    0,    0,    0,
        0, 1882,    0,    0, 1882, 1882, 1882,    0,    0,    0,

        0, 1882, 1883, 1883, 1883, 1883,    0,    0, 1883,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0, 1883,    0,    0,
     1883, 1883, 1883,    0,    0,    0,    0, 1883, 1884,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     1884,    0,    0,    0,    0,    0,    0, 1884,    0,    0,
     1884, 1884, 1884,    0,    0,    0,    0, 1884, 1885,    0,
        0,    0,    0,    0,    0,    0,    0,    0, 1885,    0,
     1885,    0,    0,    0,    0,    0,    0, 1885,    0,    0,
     1885, 1885, 1885,    0,    0,    0,    0, 1885, 1886,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0, 1886,    0,    0,
     1886, 1886, 1886,    0,    0,    0,    0, 1886, 1887, 1887,
        0, 1887,    0,    0,    0,    0,    0,    0, 1887,    0,
        0, 1887, 1887, 1887,    0,    0,    0,    0, 1887, 1888,
     1888,    0, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888,
     1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888,
     1888, 1888, 1888, 1888, 1888, 1888,    0, 1888, 1888, 1888,
     1888, 1888, 1888, 1888, 1888, 1888, 1889,    0,    0, 1889,
        0,    0,    0,    0,    0,    0, 1889,    0,    0, 1889,

     1889, 1889,    0,    0,    0,    0, 1889, 1890, 1890, 1890,
     1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
     1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
     1890, 1890,    0, 1890, 1890, 1890, 1890, 1890, 1890, 1890,
     1890, 1890, 1890, 1890, 1891, 1891,    0, 1891, 1891, 1891,
     1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891,
     1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891,    0,
     1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891,
     1891, 1892,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,

     1892,    0,    0, 1892, 1892, 1892,    0,    0,    0,    0,
     1892, 1893,    0,    0, 1893,    0,    0,    0,    0,    0,
        0, 1893,    0,    0, 1893, 1893, 1893,    0,    0,    0,
        0, 1893, 1894, 1894,    0, 1894, 1894, 1894, 1894, 1894,
     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894,
     1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1895,
     1895,    0, 1895,    0, 1895, 1895, 1895, 1895, 1895, 1895,
     1895, 1895,    0, 1895, 1895, 1895, 1895,    0, 1895, 1895,
     1895, 1895, 1895, 1895,    0, 1895,    0, 1895, 1895, 1895,

     1895, 1895, 1895, 1895, 1895, 1895, 1896,    0,    0, 1896,
        0,    0,    0,    0,    0,    0, 1896,    0,    0,    0,
        0, 1896, 1896,    0, 1896,    0,    0,    0,    0,    0,
        0, 1896,    0,    0, 1896, 1896, 1896, 1897, 1897,    0,
     1897,    0, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897,
     1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897,
     1897, 1897,    0, 1897,    0, 1897, 1897, 1897, 1897, 1897,
     1897, 1897, 1897, 1897, 1898, 1898,    0, 1898,    0, 1898,
     1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898,
     1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898,    0,

     1898,    0, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898,
     1898, 1899,    0,    0, 1899,    0,    0,    0,    0,    0,
        0, 1899,    0,    0, 1899, 1899, 1899,    0,    0,    0,
        0, 1899, 1900, 1900,    0, 1900, 1900, 1900, 1900, 1900,
     1900, 1900, 1900,    0,    0, 1900, 1900, 1900, 1900, 1900,
     1900, 1900, 1900, 1900, 1900, 1900, 1900,    0, 1900,    0,
     1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1901,
        0,    0,    0,    0,    0,    0,    0,    0,    0, 1901,
        0, 1901, 1901,    0,    0,    0,    0,    0, 1901,    0,
        0, 1901, 1901, 1901,    0,    0,    0,    0, 1901, 1902,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0, 1902,    0,
        0, 1902, 1902, 1902,    0,    0,    0,    0, 1902, 1903,
        0,    0,    0,    0,    0,    0,    0,    0,    0, 1903,
        0, 1903, 1903,    0,    0,    0,    0,    0, 1903,    0,
        0, 1903, 1903, 1903,    0,    0,    0,    0, 1903, 1904,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0, 1904,    0,
        0, 1904, 1904, 1904,    0,    0,    0,    0, 1904, 1905,
     1905,    0, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905,

     1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905,
     1905, 1905, 1905, 1905,    0, 1905,    0, 1905, 1905, 1905,
     1905, 1905, 1905, 1905, 1905, 1905, 1906,    0,    0, 1906,
        0,    0,    0,    0,    0,    0, 1906,    0,    0, 1906,
     1906, 1906,    0,    0,    0,    0, 1906, 1907, 1907,    0,
     1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907,
     1907, 1907, 1907,    0, 1907, 1907, 1907, 1907, 1907, 1907,
     1907, 1907, 1907, 1907,    0, 1907, 1907, 1907, 1907, 1907,
     1907, 1907, 1907, 1907, 1908, 1908,    0, 1908, 1908, 1908,
     1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,

     1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
     1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908,
     1908, 1909, 1909,    0, 1909, 1909, 1909, 1909, 1909, 1909,
     1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
     1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909,
     1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1910, 1910,
        0, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910,
     1910,    0, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910,
     1910, 1910, 1910,    0, 1910,    0, 1910, 1910, 1910, 1910,
     1910, 1910, 1910, 1910, 1910, 1912,    0,    0,    0,    0,

        0,    0,    0,    0, 1912,    0, 1912, 1912, 1912, 1912,
     1912,    0,    0,    0, 1912,    0, 1912,    0,    0, 1912,
     1912, 1912,    0,    0,    0,    0, 1912, 1913,    0, 1913,
     1913, 1913, 1913, 1913,    0,    0,    0, 1913,    0, 1913,
        0,    0, 1913, 1913, 1913,    0,    0,    0,    0, 1913,
     1914,    0,    0, 1914,    0,    0,    0,    0, 1914,    0,
     1914,    0,    0, 1914, 1914, 1914,    0,    0,    0,    0,
     1914, 1915, 1915,    0, 1915, 1915, 1915, 1915, 1915, 1915,
     1915, 1915,    0,    0, 1915, 1915, 1915, 1915, 1915, 1915,
     1915, 1915, 1915, 1915, 1915, 1915,    0, 1915,    0, 1915,

     1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1916, 1916,
     1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916,    0,
        0, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916,
     1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916,
     1916, 1916, 1916, 1916, 1916, 1917, 1917,    0, 1917, 1917,
     1917, 1917, 1917, 1917,    0, 1917, 1917, 1917, 1917, 1917,
     1917, 1917, 1917, 1917, 1917, 1917, 1917,    0,    0, 1917,
     1917, 1917,    0,    0, 1917, 1917, 1917, 1917, 1917, 1917,
     1917, 1917, 1918,    0,    0, 1918,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,

        0,    0,    0,    0,    0,    0,    0, 1918,    0,    0,
     1918, 1918, 1918, 1918, 1919,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0, 1919, 1919,    0,    0,
        0,    0,    0, 1919,    0,    0, 1919, 1919, 1919,    0,
        0,    0,    0, 1919, 1920, 1920,    0, 1920, 1920, 1920,
     1920,    0, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920,
     1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920,
     1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920,
     1920, 1921, 1921,    0, 1921,    0,    0,    0,    0,    0,
        0, 1921,    0,    0, 1921, 1921, 1921, 1922,    0, 1922,

     1922,    0, 1922,    0,    0,    0,    0,    0, 1922, 1922,
        0,    0, 1922, 1922, 1922, 1923, 1923,    0, 1923, 1923,
     1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
     1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
     1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
     1923, 1923, 1924,    0,    0, 1924,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0, 1924,    0,    0,
     1924, 1924, 1924, 1926,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0, 1926,    0, 1926,    0, 1926, 1926,

        0,    0,    0,    0,    0, 1926,    0,    0, 1926, 1926,
     1926,    0,    0, 1926, 1927, 1927,    0, 1927, 1927, 1927,
     1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927,
     1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927,
     1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927,
     1927, 1930,    0,    0, 1930,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0, 1930, 1930,    0, 1930,
     1930, 1930, 1930, 1931,    0,    0, 1931,    0,    0,    0,
        0, 1931,    0, 1931, 1931, 1931, 1931, 1931,    0,    0,

        0,    0, 1931, 1931, 1931,    0, 1931, 1931, 1931,    0,
        0,    0,    0, 1931, 1932,    0,    0, 1932,    0,    0,
        0,    0, 1932,    0, 1932, 1932, 1932, 1932, 1932,    0,
        0,    0,    0, 1932, 1932, 1932,    0, 1932, 1932, 1932,
        0,    0,    0,    0, 1932, 1933,    0,    0,    0,    0,
        0,    0,    0,    0,    0, 1933,    0, 1933, 1933,    0,
        0,    0,    0,    0, 1933,    0,    0, 1933, 1933, 1933,
        0,    0,    0,    0, 1933, 1934, 1934, 1934, 1934, 1934,
     1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
     1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,

     1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934,
     1934, 1934, 1935,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0, 1935,    0,    0, 1935,    0,    0,
        0, 1935,    0,    0, 1935, 1935, 1935,    0,    0,    0,
        0, 1935, 1936,    0,    0, 1936,    0,    0,    0,    0,
     1936,    0, 1936, 1936, 1936, 1936, 1936,    0,    0,    0,
        0, 1936, 1936, 1936,    0, 1936, 1936, 1936,    0,    0,
        0,    0, 1936, 1937,    0,    0, 1937,    0,    0,    0,
        0, 1937,    0, 1937, 1937, 1937, 1937, 1937,    0,    0,
        0,    0, 1937, 1937, 1937,    0, 1937, 1937, 1937,    0,

        0,    0,    0, 1937, 1938, 1938,    0, 1938, 1938, 1938,
     1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
     1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
     1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938,
     1938, 1939, 1939,    0,    0, 1939,    0,    0,    0,    0,
     1939,    0, 1939, 1939, 1939, 1939, 1939,    0,    0, 1939,
        0, 1939, 1939, 1939,    0, 1939, 1939, 1939,    0,    0,
        0,    0, 1939, 1940, 1940,    0,    0, 1940,    0,    0,
        0,    0, 1940,    0, 1940, 1940, 1940, 1940, 1940,    0,
        0, 1940,    0, 1940, 1940, 1940,    0, 1940, 1940, 1940,

        0,    0,    0,    0, 1940, 1941, 1941, 1941, 1941, 1941,
     1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941,
     1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941,
     1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941,
     1941, 1941, 1942,    0,    0, 1942,    0,    0, 1942,    0,
        0,    0, 1942,    0,    0,    0,    0,    0,    0,    0,
     1942,    0,    0,    0,    0,    0,    0, 1942,    0,    0,
     1942, 1942, 1942,    0,    0,    0,    0, 1942, 1943,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     1943,    0,    0,    0,    0,    0,    0, 1943,    0,    0,

     1943, 1943, 1943,    0,    0,    0,    0, 1943, 1944,    0,
        0, 1944,    0,    0,    0,    0, 1944,    0, 1944, 1944,
     1944, 1944, 1944,    0,    0,    0,    0, 1944, 1944, 1944,
        0, 1944, 1944, 1944,    0,    0,    0,    0, 1944, 1945,
        0,    0, 1945,    0,    0,    0,    0, 1945,    0, 1945,
     1945, 1945, 1945, 1945,    0,    0,    0,    0, 1945, 1945,
     1945,    0, 1945, 1945, 1945,    0,    0,    0,    0, 1945,
     1946, 1946, 1946, 1946,    0,    0, 1946,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0, 1946, 1946,
        0,    0,    0,    0,    0, 1946,    0,    0, 1946, 1946,

     1946,    0,    0,    0,    0, 1946, 1947, 1947, 1947, 1947,
        0,    0, 1947,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0, 1947,    0,    0,    0,    0,
        0, 1947,    0,    0, 1947, 1947, 1947,    0,    0,    0,
        0, 1947, 1948,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0, 1948,    0,    0,    0,    0,    0,
        0, 1948,    0,    0, 1948, 1948, 1948,    0,    0,    0,
        0, 1948, 1949,    0,    0,    0,    0,    0,    0,    0,
        0,    0, 1949,    0, 1949,    0,    0,    0,    0,    0,
        0, 1949,    0,    0, 1949, 1949, 1949,    0,    0,    0,

        0, 1949, 1950,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0, 1950,    0,    0,    0,    0,    0,
        0, 1950,    0,    0, 1950, 1950, 1950,    0,    0,    0,
        0, 1950, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951,
     1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951,
     1951,    0, 1951, 1951, 1951, 1951, 1951, 1951,    0, 1951,
     1951,    0,    0, 1951, 1951, 1951, 1951, 1951, 1951, 1952,
        0,    0,    0,    0,    0,    0,    0,    0,    0, 1952,
        0, 1952, 1952,    0,    0,    0,    0,    0, 1952,    0,
        0, 1952, 1952, 1952,    0,    0,    0,    0, 1952, 1953,

        0,    0,    0,    0,    0,    0,    0,    0,    0, 1953,
        0, 1953, 1953,    0,    0,    0,    0,    0, 1953,    0,
        0, 1953, 1953, 1953,    0,    0,    0,    0, 1953, 1954,
        0,    0,    0,    0, 1954,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     1954,    0,    0, 1954, 1954, 1954,    0,    0,    0,    0,
     1954, 1956,    0,    0,    0,    0,    0,    0,    0,    0,
     1956,    0, 1956, 1956, 1956, 1956, 1956,    0,    0,    0,
     1956,    0, 1956,    0,    0, 1956, 1956, 1956,    0,    0,
        0,    0, 1956, 1957,    0,    0, 1957,    0,    0,    0,

        0, 1957,    0, 1957,    0,    0, 1957, 1957, 1957,    0,
        0,    0,    0, 1957, 1958,    0, 1958, 1958, 1958, 1958,
     1958,    0,    0,    0, 1958,    0, 1958,    0,    0, 1958,
     1958, 1958,    0,    0,    0,    0, 1958, 1959,    0,    0,
     1959,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0, 1959,    0,    0, 1959, 1959, 1959, 1959, 1960,
     1960,    0, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,
     1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960,

     1960, 1960, 1960, 1960, 1960, 1960, 1961,    0,    0, 1961,
        0,    0,    0,    0,    0,    0, 1961,    0,    0, 1961,
     1961, 1961, 1962,    0, 1962,    0, 1962, 1962,    0, 1962,
        0,    0,    0,    0,    0, 1962, 1962,    0,    0, 1962,
     1962, 1962, 1963, 1963,    0, 1963, 1963, 1963, 1963, 1963,
     1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963,
     1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963,
     1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1965,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     1965,    0, 1965,    0, 1965, 1965,    0,    0,    0,    0,

        0, 1965,    0,    0, 1965, 1965, 1965,    0,    0, 1965,
     1966, 1966,    0, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966,
     1966, 1966, 1966, 1966, 1966, 1966, 1966, 1967, 1967,    0,
     1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967,
     1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967,
     1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967,
     1967, 1967, 1967, 1967, 1969,    0,    0, 1969,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0, 1969,
     1969,    0, 1969, 1969, 1969, 1969, 1970, 1970,    0, 1970,
        0,    0,    0,    0,    0,    0,    0,    0,    0, 1970,
        0, 1970, 1970,    0, 1970, 1970,    0,    0,    0,    0,
     1970, 1970,    0,    0, 1970, 1970, 1970,    0, 1970, 1971,
        0,    0, 1971,    0,    0,    0,    0, 1971,    0, 1971,
     1971, 1971, 1971, 1971,    0,    0,    0,    0, 1971, 1971,
     1971,    0, 1971, 1971, 1971,    0,    0,    0,    0, 1971,
     1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972,
     1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972,

     1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972,
     1972, 1972, 1972, 1972, 1972, 1972, 1972, 1973,    0,    0,
     1973,    0,    0,    0,    0, 1973,    0, 1973, 1973, 1973,
     1973, 1973,    0,    0,    0,    0, 1973, 1973, 1973,    0,
     1973, 1973, 1973,    0,    0,    0,    0, 1973, 1974, 1974,
        0, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974,
     1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974,
     1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974,
     1974, 1974, 1974, 1974, 1974, 1975, 1975,    0,    0, 1975,
        0,    0,    0,    0, 1975,    0, 1975, 1975, 1975, 1975,

     1975,    0,    0, 1975,    0, 1975, 1975, 1975,    0, 1975,
     1975, 1975,    0,    0,    0,    0, 1975, 1976,    0,    0,
     1976,    0,    0,    0,    0, 1976,    0, 1976, 1976, 1976,
     1976, 1976,    0,    0,    0,    0, 1976, 1976, 1976,    0,
     1976, 1976, 1976,    0,    0,    0,    0, 1976, 1977, 1977,
     1977, 1977,    0,    0, 1977,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0, 1977,    0,    0,
        0,    0,    0, 1977,    0,    0, 1977, 1977, 1977,    0,
        0,    0,    0, 1977, 1978, 1978, 1978, 1978,    0,    0,
     1978,    0,    0,    0,    0,    0,    0,    0,    0,    0,

        0,    0, 1978, 1978,    0,    0,    0,    0,    0, 1978,
        0,    0, 1978, 1978, 1978,    0,    0,    0,    0, 1978,
     1979,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     1979,    0, 1979,    0,    0,    0,    0,    0,    0, 1979,
        0,    0, 1979, 1979, 1979,    0,    0,    0,    0, 1979,
     1980,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0, 1980,    0,    0,    0,    0,    0,    0, 1980,
        0,    0, 1980, 1980, 1980,    0,    0,    0,    0, 1980,
     1983,    0,    0, 1983,    0,    0,    0,    0,    0,    0,
     1983,    0,    0, 1983, 1983, 1983,    0,    0,    0,    0,

     1983, 1984,    0,    0,    0,    0,    0,    0,    0,    0,
     1984,    0, 1984, 1984, 1984, 1984, 1984,    0,    0,    0,
     1984,    0, 1984,    0,    0, 1984, 1984, 1984,    0,    0,
        0,    0, 1984, 1985,    0, 1985, 1985, 1985, 1985, 1985,
        0,    0,    0, 1985,    0, 1985,    0,    0, 1985, 1985,
     1985,    0,    0,    0,    0, 1985, 1986, 1986,    0, 1986,
        0,    0,    0,    0,    0,    0, 1986,    0,    0, 1986,
     1986, 1986, 1987,    0, 1987,    0, 1987, 1987,    0, 1987,
        0,    0,    0,    0,    0, 1987, 1987,    0,    0, 1987,
     1987, 1987, 1988, 1988,    0, 1988, 1988, 1988, 1988, 1988,

     1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988,
     1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988,
     1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1989,
     1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989,
     1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989,    0, 1989,
     1989, 1989, 1989, 1989, 1989,    0, 1989, 1989,    0, 1989,
        0, 1989, 1989, 1989, 1989, 1989, 1990,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0, 1990,    0,    0,
     1990,    0,    0,    0,    0,    0,    0, 1990,    0,    0,
     1990, 1990, 1990,    0,    0,    0,    0, 1990, 1991,    0,

        0,    0,    0,    0, 1991,    0,    0, 1991,    0,    0,
        0,    0,    0,    0, 1991,    0,    0, 1991, 1991, 1991,
        0,    0,    0,    0, 1991, 1992, 1992,    0, 1992, 1992,
     1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992,
     1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992,
     1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992,
     1992, 1992, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
     1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
     1993,    0, 1993, 1993, 1993, 1993, 1993, 1993,    0, 1993,
     1993,    0,    0,    0, 1993, 1993, 1993, 1993, 1993, 1994,

     1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994,
     1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994,    0, 1994,
     1994, 1994, 1994, 1994, 1994,    0, 1994, 1994,    0,    0,
        0, 1994, 1994, 1994, 1994, 1994, 1995, 1995, 1995, 1995,
     1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
     1995, 1995, 1995, 1995, 1995,    0, 1995, 1995, 1995, 1995,
     1995, 1995,    0, 1995, 1995,    0,    0,    0, 1995, 1995,
     1995, 1995, 1995, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
     1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
     1996, 1996,    0, 1996, 1996, 1996, 1996, 1996, 1996,    0,

     1996, 1996,    0,    0,    0, 1996, 1996, 1996, 1996, 1996,
     1997, 1997,    0, 1997, 1997, 1997, 1997, 1997, 1997, 1997,
     1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997,
     1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997,
     1997, 1997, 1997, 1997, 1997, 1997, 1997, 1998, 1998,    0,
     1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998,
     1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998,
     1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998,
     1998, 1998, 1998, 1998, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,

     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745,
     1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745
    } ;

extern int yy_flex_debug;
int yy_flex_debug = 0;

static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
static char *yy_full_match;
static int yy_lp;
static int yy_looking_for_trail_begin = 0;
static int yy_full_lp;
static int *yy_full_state;
#define YY_TRAILING_MASK 0x2000
#define YY_TRAILING_HEAD_MASK 0x4000
#define REJECT \
{ \
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ \
yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
(yy_lp) = (yy_full_lp); /* restore orig. accepting pos. */ \
(yy_state_ptr) = (yy_full_state); /* restore orig. state */ \
yy_current_state = *(yy_state_ptr); /* restore curr. state */ \
++(yy_lp); \
goto find_rule; \
}

#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
/*************************************************************************
 *
 * Copyright (c) 2014-2025 Barbara Geller & Ansel Sermersheim
 * Copyright (c) 1997-2014 Dimitri van Heesch
 *
*************************************************************************/

#include <commentscan.h>

#include <cite.h>
#include <condparser.h>
#include <config.h>
#include <default_args.h>
#include <doxy_globals.h>
#include <entry.h>
#include <formula.h>
#include <index.h>
#include <language.h>
#include <membergroup.h>
#include <message.h>
#include <outputlist.h>
#include <parse_base.h>
#include <parse_cstyle.h>
#include <parse_md.h>
#include <util.h>

#include <QFile>
#include <QStack>
#include <QVector>

#include <assert.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

#define YY_NO_INPUT 1

// forward declarations
static bool handleBrief(const QString &str, const QStringList &list);
static bool handleFn(const QString &str, const QStringList &list);
static bool handleProperty(const QString &str, const QStringList &list);
static bool handleDef(const QString &str, const QStringList &list);
static bool handleOverload(const QString &str, const QStringList &list);
static bool handleEnum(const QString &str, const QStringList &list);
static bool handleDefGroup(const QString &str, const QStringList &list);
static bool handleAddToGroup(const QString &str, const QStringList &list);
static bool handleWeakGroup(const QString &str, const QStringList &list);
static bool handleNamespace(const QString &str, const QStringList &list);
static bool handlePackage(const QString &str, const QStringList &list);
static bool handleClass(const QString &str, const QStringList &list);
static bool handleConcept(const QString &str, const QStringList &list);
static bool handleHeaderFile(const QString &str, const QStringList &list);
static bool handleProtocol(const QString &str, const QStringList &list);
static bool handleCategory(const QString &str, const QStringList &list);
static bool handleUnion(const QString &str, const QStringList &list);
static bool handleStruct(const QString &str, const QStringList &list);
static bool handleInterface(const QString &str, const QStringList &list);
static bool handleIdlException(const QString &str, const QStringList &list);
static bool handlePage(const QString &str, const QStringList &list);
static bool handleMainpage(const QString &str, const QStringList &list);
static bool handleFile(const QString &str, const QStringList &list);
static bool handleDir(const QString &str, const QStringList &list);
static bool handleExample(const QString &str, const QStringList &list);
static bool handleDetails(const QString &str, const QStringList &list);
static bool handleName(const QString &str, const QStringList &list);
static bool handleTodo(const QString &str, const QStringList &list);
static bool handleTest(const QString &str, const QStringList &list);
static bool handleBug(const QString &str, const QStringList &list);
static bool handleSubpage(const QString &str, const QStringList &list);
static bool handleDeprecated(const QString &str, const QStringList &list);
static bool handleXRefItem(const QString &str, const QStringList &list);
static bool handleRelated(const QString &str, const QStringList &list);
static bool handleRelatedAlso(const QString &str, const QStringList &list);
static bool handleMemberOf(const QString &str, const QStringList &list);
static bool handleRefItem(const QString &str, const QStringList &list);
static bool handleSection(const QString &str, const QStringList &list);
static bool handleAnchor(const QString &str, const QStringList &list);
static bool handleCite(const QString &str, const QStringList &list);
static bool handleFormatBlock(const QString &str, const QStringList &list);
static bool handleAddIndex(const QString &str, const QStringList &list);
static bool handleIf(const QString &str, const QStringList &list);
static bool handleIfNot(const QString &str, const QStringList &list);
static bool handleElseIf(const QString &str, const QStringList &list);
static bool handleElse(const QString &str, const QStringList &list);
static bool handleEndIf(const QString &str, const QStringList &list);
static bool handleIngroup(const QString &str, const QStringList &list);
static bool handleNoSubGrouping(const QString &str, const QStringList &list);
static bool handleShowInitializer(const QString &str, const QStringList &list);
static bool handleHideInitializer(const QString &str, const QStringList &list);
static bool handleCallgraph(const QString &str, const QStringList &list);
static bool handleHideCallgraph(const QString &str, const QStringList &list);
static bool handleCallergraph(const QString &str, const QStringList &list);
static bool handleHideCallergraph(const QString &str, const QStringList &list);
static bool handleReferencedByRelation(const QString &str, const QStringList &list);
static bool handleHideReferencedByRelation(const QString &str, const QStringList &list);
static bool handleReferencesRelation(const QString &str, const QStringList &list);
static bool handleHideReferencesRelation(const QString &str, const QStringList &list);
static bool handleInternal(const QString &str, const QStringList &list);
static bool handleStatic(const QString &str, const QStringList &list);
static bool handlePure(const QString &str, const QStringList &list);
static bool handlePrivate(const QString &str, const QStringList &list);
static bool handlePrivateSection(const QString &str, const QStringList &list);
static bool handleProtected(const QString &str, const QStringList &list);
static bool handleProtectedSection(const QString &str, const QStringList &list);
static bool handlePublic(const QString &str, const QStringList &list);
static bool handlePublicSection(const QString &str, const QStringList &list);
static bool handleToc(const QString &str, const QStringList &list);
static bool handleInherit(const QString &str, const QStringList &list);
static bool handleExtends(const QString &str, const QStringList &list);
static bool handleCopyDoc(const QString &str, const QStringList &list);
static bool handleCopyBrief(const QString &str, const QStringList &list);
static bool handleCopyDetails(const QString &str, const QStringList &list);
static bool handleParBlock(const QString &str, const QStringList &list);
static bool handleEndParBlock(const QString &str, const QStringList &list);
static bool handleParam(const QString &str, const QStringList &list);
static bool handleRetval(const QString &str, const QStringList &list);
//   static void handleGuard(const QString &str, const QStringList &list);

static void checkFormula();

using DocCmdFunc = bool (*)(const QString &str, const QStringList &list);

struct DocCmdMap
{
   DocCmdMap(const char *x1, DocCmdFunc x2, bool x3) {
      cmdName   = QString::fromUtf8(x1);
      handler   = x2;
      endsBrief = x3;
   }

   QString cmdName;
   DocCmdFunc handler;
   bool endsBrief;
};

// map of command to handler function
static DocCmdMap docCmdMap[] =
{
  // command name      handler function         ends brief description
  { "addindex",        &handleAddIndex,                 false },
  { "addtogroup",      &handleAddToGroup,               false },
  { "anchor",          &handleAnchor,                   true  },
  { "arg",             nullptr,                         true  },
  { "attention",       nullptr,                         true  },
  { "author",          nullptr,                         true  },
  { "authors",         nullptr,                         true  },
  { "brief",           &handleBrief,                    false },
  { "bug",             &handleBug,                      false },
  { "callergraph",     &handleCallergraph,              false },
  { "callgraph",       &handleCallgraph,                false },
  { "category",        &handleCategory,                 false },
  { "cite",            &handleCite,                     false },
  { "class",           &handleClass,                    false },
  { "code",            &handleFormatBlock,              true  },
  { "concept",         &handleConcept,                  false },
  { "copybrief",       &handleCopyBrief,                false },
  { "copydetails",     &handleCopyDetails,              true  },
  { "copydoc",         &handleCopyDoc,                  true  },
  { "copyright",       nullptr,                         true  },
  { "date",            nullptr,                         true  },
  { "def",             &handleDef,                      false },
  { "defgroup",        &handleDefGroup,                 false },
  { "deprecated",      &handleDeprecated,               false },
  { "details",         &handleDetails,                  true  },
  { "dir",             &handleDir,                      false },
  { "docbookinclude",  nullptr,                         false },
  { "docbookonly",     &handleFormatBlock,              false },
  { "dot",             &handleFormatBlock,              true  },
  { "dotfile",         nullptr,                         true  },
  { "else",            &handleElse,                     false },
  { "elseif",          &handleElseIf,                   false },
  { "endif",           &handleEndIf,                    false },
  { "endparblock",     &handleEndParBlock,              true  },
  { "enum",            &handleEnum,                     false },
  { "example",         &handleExample,                  false },
  { "exception",       nullptr,                         true  },
  { "extends",         &handleExtends,                  true  },
  { "file",            &handleFile,                     false },
  { "fn",              &handleFn,                       false },
  { "group",           &handleDefGroup,                 false },
  { "headerfile",      &handleHeaderFile,               false },
  { "hidecallergraph", &handleHideCallergraph,          false },
  { "hidecallgraph",   &handleHideCallgraph,            false },
  { "hideinitializer", &handleHideInitializer,          false },
  { "hiderefby",       &handleHideReferencedByRelation, false },
  { "hiderefs",        &handleHideReferencesRelation,   false },
  { "htmlinclude",     nullptr,                         false },
  { "htmlonly",        &handleFormatBlock,              false },
  { "idlexcept",       &handleIdlException,             false },
  { "if",              &handleIf,                       false },
  { "ifnot",           &handleIfNot,                    false },
  { "image",           nullptr,                         true  },
  { "implements",      &handleExtends,                  true  },
  { "include",         nullptr,                         true  },
  { "includelineno",   nullptr,                         true  },
  { "ingroup",         &handleIngroup,                  false },
  { "inherit",         &handleInherit,                  true  },
  { "interface",       &handleInterface,                false },
  { "internal",        &handleInternal,                 true  },
  { "invariant",       nullptr,                         true  },
  { "latexinclude",    nullptr,                         false },
  { "latexonly",       &handleFormatBlock,              false },
  { "li",              nullptr,                         true  },
  { "line",            nullptr,                         true  },
  { "mainpage",        &handleMainpage,                 false },
  { "maninclude",      nullptr,                         false },
  { "manonly",         &handleFormatBlock,              false },
  { "memberof",        &handleMemberOf,                 true  },
  { "msc",             &handleFormatBlock,              true  },
  { "name",            &handleName,                     false },
  { "namespace",       &handleNamespace,                false },
  { "nosubgrouping",   &handleNoSubGrouping,            false },
  { "note",            nullptr,                         true  },
  { "overload",        &handleOverload,                 false },
  { "package",         &handlePackage,                  false },
  { "page",            &handlePage,                     false },
  { "par",             nullptr,                         true  },
  { "paragraph",       &handleSection,                  true  },
  { "param",           &handleParam,                    true  },
  { "parblock",        &handleParBlock,                 true  },
  { "post",            nullptr,                         true  },
  { "pre",             nullptr,                         true  },
  { "private",         &handlePrivate,                  false },
  { "privatesection",  &handlePrivateSection,           false },
  { "property",        &handleProperty,                 false },
  { "protected",       &handleProtected,                false },
  { "protectedsection",&handleProtectedSection,         false },
  { "protocol",        &handleProtocol,                 false },
  { "public",          &handlePublic,                   false },
  { "publicsection",   &handlePublicSection,            false },
  { "pure",            &handlePure,                     false },
  { "refitem",         &handleRefItem,                  true  },
  { "related",         &handleRelated,                  true  },
  { "relatedalso",     &handleRelatedAlso,              true  },
  { "relates",         &handleRelated,                  true  },
  { "relatesalso",     &handleRelatedAlso,              true  },
  { "remark",          nullptr,                         true  },
  { "remarks",         nullptr,                         true  },
  { "result",          nullptr,                         true  },
  { "return",          nullptr,                         true  },
  { "returns",         nullptr,                         true  },
  { "retval",          &handleRetval,                   true  },
  { "rtfinclude",      nullptr,                         false },
  { "rtfonly",         &handleFormatBlock,              false },
  { "sa",              nullptr,                         true  },
  { "section",         &handleSection,                  true  },
  { "see",             nullptr,                         true  },
  { "short",           &handleBrief,                    false },
  { "showinitializer", &handleShowInitializer,          false },
  { "showrefby",       &handleReferencedByRelation,     false },
  { "showrefs",        &handleReferencesRelation,       false },
  { "since",           nullptr,                         true  },
  { "snippet",         nullptr,                         true  },
  { "snippetlineno",   nullptr,                         true  },
  { "startuml",        &handleFormatBlock,              true  },
  { "static",          &handleStatic,                   false },
  { "struct",          &handleStruct,                   false },
  { "subpage",         &handleSubpage,                  true  },
  { "subsection",      &handleSection,                  true  },
  { "subsubsection",   &handleSection,                  true  },
  { "tableofcontents", &handleToc,                      false },
  { "test",            &handleTest,                     false },
  { "throw",           nullptr,                         true  },
  { "throws",          nullptr,                         true  },
  { "todo",            &handleTodo,                     false },
  { "tparam",          nullptr,                         true  },
  { "typedef",         &handleFn,                       false },
  { "union",           &handleUnion,                    false },
  { "until",           nullptr,                         true  },
  { "var",             &handleFn,                       false },
  { "verbatim",        &handleFormatBlock,              true  },
  { "verbinclude",     nullptr,                         false },
  { "version",         nullptr,                         true  },
  { "warning",         nullptr,                         true  },
  { "weakgroup",       &handleWeakGroup,                false },
  { "xmlinclude",      nullptr,                         false },
  { "xmlonly",         &handleFormatBlock,              false },
  { "xrefitem",        &handleXRefItem,                 false },
  { nullptr,           nullptr,                         false }
};

//  Maps a command name (as found in a comment block) onto a specific handler function
class DocCmdMapper
{
  public:
    struct Cmd {
      DocCmdFunc func;
      bool endsBrief;
    };

    // maps a command name to a handler function
    static Cmd *map(const QString &name) {
      return instance()->find(name);
    }

    // release the instance
    static void freeInstance() {
      delete s_instance;
      s_instance = nullptr;
    }

  private:
    static DocCmdMapper *instance() {
      if (s_instance == nullptr) {
         s_instance = new DocCmdMapper;
      }

      return s_instance;
   }

   DocCmdMapper() {
      DocCmdMap *p = docCmdMap;

      while (! p->cmdName.isEmpty()) {
         if (m_map.contains(p->cmdName)) {
            err("DocCmdMapper: command %s already added\n", csPrintable(p->cmdName));
            Doxy_Work::stopDoxyPress();
         }

         Cmd *cmd       = new Cmd;
         cmd->func      = p->handler;
         cmd->endsBrief = p->endsBrief;

         m_map.insert(p->cmdName, cmd);
         ++p;
      }
   }

   Cmd *find(const QString &name) {
      return m_map.value(name);
   }

   QHash<QString, Cmd *> m_map;
   static DocCmdMapper *s_instance;
};

DocCmdMapper *DocCmdMapper::s_instance = nullptr;

#define YY_NEVER_INTERACTIVE 1

enum XRefKind {
  XRef_Item,
  XRef_Todo,
  XRef_Test,
  XRef_Bug,
  XRef_Deprecated,
  XRef_None
};

enum OutputContext {
  OutputMainDoc,
  OutputBrief,
  OutputXRef,
  OutputInbody
};

enum GuardType {
  Guard_If,
  Guard_IfNot,
  Guard_Skip
};

class GuardedSection
{
 public:
   GuardedSection(bool enabled, bool parentVisible)
      : m_enabled(enabled), m_parentVisible(parentVisible)
   { }

   bool isEnabled() const {
      return m_enabled;
   }

   bool parentVisible() const {
      return m_parentVisible;
   }

 private:
   bool m_enabled;
   bool m_parentVisible;
};

static void groupAddDocs(QSharedPointer<Entry> e);

static QString          s_inputString;         // input string
static QString          s_currentCommand;
static int              s_inputPosition;       // read pointer
static int              s_prevPosition;
static char            *s_bufferPosition;

static QString          yyFileName;            // file name that is read from
static int              yyLineNr;              // line number in the input
static bool             inBody;                // was the comment found inside the body of a function?
static OutputContext    inContext;             // are we inside the brief, details or xref part
static bool             briefEndsAtDot;        // does the brief description stop at a dot
static QString          formulaText;           // Running text of a formula
static QString          formulaEnv;            // environment name
static int              formulaNewLines;       // amount of new lines in the formula

static QString          s_outputXRef;          // tmp argument of todo/test/../xrefitem commands
static QString          s_blockName;           // preformatted block name (e.g. verbatim, latexonly,...)
static XRefKind         xrefKind;              // kind of cross-reference command
static XRefKind         newXRefKind;
static GuardType        s_guardType;           // kind of guard for conditional section
static bool             s_isEnabledSection;
static QString          s_functionProto;       // function prototype

static bool             s_needNewEntry;
// static int           s_docBlockContext;

static QString          s_sectionLabel;
static QString          s_sectionTitle;
static int              s_sectionLevel;
static QString          xrefItemKey;
static QString          newXRefItemKey;
static QString          xrefItemTitle;
static QString          xrefListTitle;
static Protection       s_protection;

static bool             xrefAppendFlag;
static bool             inGroupParamFound;
static int              s_braceCount;
static bool             insidePre;
static bool             s_parseMore;

static int              s_condCount;
static int              s_commentCount;
static QString          s_spaceBeforeCmd;
static QString          s_spaceBeforeIf;
static QString          s_copyDocArg;
static QString          s_guardExpr;
static int              s_roundCount;
static int              s_htmlDetails;
static bool             s_insideParBlock;

static int              s_openCount;
static int              s_memberGroupId = DOX_NOGROUP;
static QString          s_memberGroupHeader;
static QString          s_memberGroupDocs;
static QString          s_memberGroupRelates;
static QString          s_compoundName;

static QString          s_htmlAnchor;
static bool             s_isHtmlAnchor;

static bool             s_internalDocs;
static bool             s_processInternalDocs = false;

static ParserInterface        *langParser;        // the language parser calling us

static QSharedPointer<Entry>  s_docsEntry;        // which entry
static EntryKey               s_docsEnum;         // which enum in EntryKey (brief, main, inbody)

static QStack<GuardedSection> s_guards;           // tracks nested conditional sections (if, ifnot, ..)
static QSharedPointer<Entry>  current;            // working entry

static QStack<QSharedPointer<Grouping>> s_autoGroupStack;

// double declared
static void yyunput (int c, char *buf_ptr);

static void initParser()
{
   s_sectionLabel.resize(0);
   s_sectionTitle.resize(0);
   s_memberGroupHeader.resize(0);

   s_insideParBlock = false;
   s_internalDocs   = Config::getBool("internal-docs");
}

static bool getDocSectionName(int s)
{
  switch(s) {
    case Entry::CATEGORYDOC_SEC:
    case Entry::CLASSDOC_SEC:
    case Entry::CONCEPTDOC_SEC:
    case Entry::DEFINEDOC_SEC:
    case Entry::DIRDOC_SEC:
    case Entry::ENUMDOC_SEC:
    case Entry::EXAMPLE_SEC:
    case Entry::EXCEPTIONDOC_SEC:
    case Entry::FILEDOC_SEC:
    case Entry::GROUPDOC_SEC:
    case Entry::MAINPAGEDOC_SEC:
    case Entry::MEMBERDOC_SEC:
    case Entry::MEMBERGRP_SEC:
    case Entry::NAMESPACEDOC_SEC:
    case Entry::OVERLOADDOC_SEC:
    case Entry::PACKAGEDOC_SEC:
    case Entry::PAGEDOC_SEC:
    case Entry::PROTOCOLDOC_SEC:
    case Entry::STRUCTDOC_SEC:
    case Entry::UNIONDOC_SEC:
    case Entry::VARIABLEDOC_SEC:
      return true;

    default:
      return false;
  }
}

static bool makeStructuralIndicator(Entry::Sections s)
{
   if (getDocSectionName(current->section)) {
      return true;

   } else {
      s_needNewEntry     = true;

      current->section   = s;
      current->startLine = yyLineNr;
      current->docLine   = yyLineNr;

      current->setData(EntryKey::File_Name, yyFileName);

      return false;
   }
}

static QString stripQuotes(const QString &s)
{
   QString name = s;

   if (name.isEmpty()) {
      return name;
   }

   if (name.at(0) == '"' && name.at(name.length() - 1) == '"') {
      name = name.mid(1, name.length() - 2);
   }

   return name;
}

static void addXRefItem(const QString &listName, const QString &itemTitle, const QString &listTitle, bool append)
{
   QSharedPointer<Entry> docEntry = current; // inBody && previous ? previous : current;

   if (listName.isEmpty()) {
      return;
   }

   auto refList = Doxy_Globals::xrefLists.find(listName);

   if (refList == Doxy_Globals::xrefLists.end()) {
      // new list
      Doxy_Globals::xrefLists.insert(listName, RefList(listName, listTitle, itemTitle));
      refList = Doxy_Globals::xrefLists.find(listName);
   }

   ListItemInfo *listItem = nullptr;

   for (auto &item : docEntry->m_specialLists) {
      listItem = &item;

      if (listItem->type == listName) {
         break;
      }
   }

   if (listItem && append) {
      // already found item of same type just before this one

      RefItem *item = refList->getRefItem(listItem->itemId);
      assert(item != 0);

      item->text += " <p>";
      item->text += s_outputXRef;

   } else {
      // new item

      int itemId  = refList->addRefItem();

      // if we have already an item from the same list type (e.g. a second @todo)
      // in the same Entry (i.e. lii!=0) then we reuse its link anchor.

      QString anchorLabel = QString("_%1%2").formatArg(listName).formatArg(itemId, 6, 10, QChar('0'));

      RefItem *item = refList->getRefItem(itemId);
      assert(item != 0);

      item->text       = s_outputXRef;
      item->listAnchor = anchorLabel;

      docEntry->addSpecialListItem(listName, itemId);

      QString cmdString = QString(" \\xrefitem %1 %2.").formatArg(listName).formatArg(itemId);

      if (inBody) {
         docEntry->appendData(EntryKey::Inbody_Docs, cmdString);
      } else {
         docEntry->appendData(EntryKey::Main_Docs,   cmdString);
      }

      QSharedPointer<SectionInfo> si = Doxy_Globals::sectionDict.find(anchorLabel);

      if (si) {
         if (si->lineNr != -1) {
            warn(listName, yyLineNr, "Multiple use of section label '%s', (first occurrence: %s, line %d)",
                  csPrintable(anchorLabel), csPrintable(si->fileName), si->lineNr);

         } else {
            warn(listName, yyLineNr, "Multiple use of section label '%s', (first occurrence: %s)",
                  csPrintable(anchorLabel), csPrintable(si->fileName));
         }

      } else {
         si = QMakeShared<SectionInfo>(listName, yyLineNr, anchorLabel, s_sectionTitle, SectionInfo::Anchor, s_sectionLevel);
         Doxy_Globals::sectionDict.insert(anchorLabel, si);
         docEntry->m_anchors.append(*si);
      }
   }

   s_outputXRef.clear();
}

// Adds a formula text to the list/dictionary of formulas if it was
// not already added. Returns the label of the formula.
static QString addFormula()
{
   QString formLabel;

   auto f = Doxy_Globals::formulaDict.find(formulaText);

   if (f == Doxy_Globals::formulaDict.end()) {
      Formula tmp = Formula(formulaText);

      Doxy_Globals::formulaList.append(tmp);
      Doxy_Globals::formulaDict.insert(formulaText, tmp);

      formLabel = QString("\\form#%1").formatArg(tmp.getId());

      Doxy_Globals::formulaNameDict.insert(formLabel, tmp);
      f = Doxy_Globals::formulaDict.find(formulaText);

   } else {
      formLabel = QString("\\form#%1").formatArg(f->getId());

   }

   for (int i = 0; i < formulaNewLines; ++i) {
      // add fake newlines to keep the warnings correctly aligned
      formLabel += "@_fakenl";
   }

   return formLabel;
}

static SectionInfo::SectionType sectionLevelToType(int level)
{
  if (level >= 0 && level < 5) {
      return (SectionInfo::SectionType)level;
   }

   return SectionInfo::Anchor;
}

static void addSection()
{
   QSharedPointer<SectionInfo> si = Doxy_Globals::sectionDict.find(s_sectionLabel);

   if (si != nullptr) {

      if (si->lineNr != -1) {

         warn(yyFileName, yyLineNr, "Multiple use of section label '%s' while adding section, (first occurrence: %s, line %d)",
               csPrintable(s_sectionLabel), csPrintable(si->fileName), si->lineNr);

      } else {
         warn(yyFileName, yyLineNr, "Multiple use of section label '%s' while adding section, (first occurrence: %s)",
               csPrintable(s_sectionLabel), csPrintable(si->fileName));
      }

   } else {
      // create a new section element
      s_sectionTitle += QString::fromUtf8(yytext).trimmed();

      si = QMakeShared<SectionInfo>(yyFileName, yyLineNr, s_sectionLabel, s_sectionTitle,
               sectionLevelToType(s_sectionLevel), s_sectionLevel);

      // add section to this entry
      current->m_anchors.append(*si);

      // add section to the global dictionary
      Doxy_Globals::sectionDict.insert(s_sectionLabel, si);

      // for a section the si->fileName is the physical file name, this will be replaced with the
      // section name in doctokenizer processSection()
   }
}

static void addCite()
{
   QString text = QString::fromUtf8(yytext);
   if (text.startsWith('"')) {
      text.chop(1);
      text = text.mid(1);
   }

   Doxy_Globals::citeDict.insert(text);
}

static void lineCount()
{
   // commentscan, parse_py

   for (const char *p = yytext; *p; ++p) {
      yyLineNr += (*p == '\n');
   }
}

// strip trailing whitespace (excluding newlines) from string s
static void stripTrailingWhiteSpace(QString &str)
{
   if (str.isEmpty()) {
      return;
   }

   QString::const_iterator iter       = str.constEnd() - 1;
   QString::const_iterator iter_start = str.constBegin();
   QString::const_iterator iter_end   = str.constEnd();

   QChar c;

   while (true) {
      c = *iter;
      QStringView tmp = QStringView(iter, iter_end);

      if (c == ' ' || c == '\t' || c == '\r') {
         // normal whitespace

      } else if (tmp.endsWith("\\internal_linebr")) {
         // special line break marker

         iter -= 15;

      } else if (c == '\n') {
         // normal newline

      } else {
         // non-whitespace, done
         break;
      }

      if (iter == str.constBegin()) {
         break;
      }

      --iter;
   }

   // update the string
   str = QString(iter_start, iter+1);
}

// selects the output to write to
static inline void setOutput(OutputContext ctx)
{
   bool xrefAppendToPrev = xrefAppendFlag;

   // determine append flag for the next item (i.e. the end of this item)
   xrefAppendFlag = ! inBody &&
                    inContext == OutputXRef && ctx == OutputXRef &&    // two consecutive xref items
                    newXRefKind == xrefKind &&                         // of the same kind
                    (xrefKind != XRef_Item ||
                    newXRefItemKey == xrefItemKey);                    // with the same key if \xrefitem

   if (inContext == OutputXRef) {

      // end of XRef section => add the item
      // See if we can append this new xref item to the previous one.
      // We know this at the start of the next item of the same
      // type and need to remember this until the end of that item.

    switch(xrefKind) {
         case XRef_Todo:
            addXRefItem("todo", theTranslator->trTodo(), theTranslator->trTodoList(), xrefAppendToPrev);
            break;

         case XRef_Test:
            addXRefItem("test", theTranslator->trTest(), theTranslator->trTestList(), xrefAppendToPrev);
            break;

         case XRef_Bug:
            addXRefItem("bug", theTranslator->trBug(), theTranslator->trBugList(), xrefAppendToPrev);
            break;

         case XRef_Deprecated:
            // ensure the current entry is marked
            current->m_traits.setTrait(Entry::Virtue::Deprecated);

            addXRefItem("deprecated", theTranslator->trDeprecated(), theTranslator->trDeprecatedList(), xrefAppendToPrev);
            break;

         case XRef_Item:
            // user defined list
            addXRefItem(xrefItemKey, xrefItemTitle, xrefListTitle, xrefAppendToPrev);
            break;

         case XRef_None:
            assert(0);
            break;
      }
   }

  xrefItemKey = newXRefItemKey;

  int oldContext = inContext;
  inContext = ctx;

   if (inContext != OutputXRef && inBody) {
      inContext = OutputInbody;
   }

  switch(inContext) {
      case OutputMainDoc:
         if (oldContext != inContext) {

            QString tmpDocs = current->getData(EntryKey::Main_Docs);
            stripTrailingWhiteSpace(tmpDocs);
            current->setData(EntryKey::Main_Docs, tmpDocs);

            if (current->getData(EntryKey::MainDocs_File).isEmpty()) {
               current->setData(EntryKey::MainDocs_File, yyFileName);
               current->docLine = yyLineNr;
            }
         }

         s_docsEntry = current;
         s_docsEnum  = EntryKey::Main_Docs;

         break;

      case OutputBrief:
         if (oldContext != inContext) {
            if (current->getData(EntryKey::Brief_File).isEmpty()) {
               current->setData(EntryKey::Brief_File, yyFileName);
               current->briefLine = yyLineNr;
            }
         }

         if (current->getData(EntryKey::Brief_Docs).trimmed().isEmpty())  {
            // only want one brief description even if multiple are given
            s_docsEntry = current;
            s_docsEnum  = EntryKey::Brief_Docs;

         } else {

            if (! current->getData(EntryKey::Main_Docs).isEmpty()) {
               // when appending parts add a new line
               current->appendData(EntryKey::Main_Docs, "\n");
            }

            s_docsEntry  = current;
            s_docsEnum   = EntryKey::Main_Docs;

            inContext    = OutputMainDoc;             // need to switch to detailed docs
         }
         break;

      case OutputInbody:
         s_docsEntry = current;
         s_docsEnum  = EntryKey::Inbody_Docs;
         break;

      case OutputXRef:
         // indicates s_outputXRef should be used for the output string
         s_docsEntry = QSharedPointer<Entry>();

         break;
   }
}

static void addAnchor(const QString &anchorName)
{
   QSharedPointer<SectionInfo> si = Doxy_Globals::sectionDict.find(anchorName);

   if (si) {
      // anchor name already exists
      si->dupAnchor_cnt++;

   } else {
      // title is empty, level is zero
      si = QMakeShared<SectionInfo>(yyFileName, yyLineNr, anchorName, QString(), SectionInfo::Anchor, 0);
      si->dupAnchor_fName = yyFileName;

      Doxy_Globals::sectionDict.insert(anchorName, si);
      current->m_anchors.append(*si);
   }
}

// add a string to one of the three doc outputs
static void addToOutput(const QString &str)
{
   if (s_docsEntry == nullptr) {
      // indicates s_outputXRef should be used for the output string
      s_outputXRef += str;

   } else {
      s_docsEntry->appendData(s_docsEnum, str);
   }
}

static void addToOutput(QChar c)
{
   if (s_docsEntry == nullptr) {
      // indicates s_outputXRef should be used for the output string
      s_outputXRef += c;

   } else {
      s_docsEntry->appendData(s_docsEnum, c);
   }
}

static void unputString(const QString &str) {

   auto iter     = str.storage_rbegin();
   auto iter_end = str.storage_rend();

   while (iter != iter_end) {
      unput(*iter);

      ++iter;
   }
}

static void endBrief(bool isOutput = true)
{
   if (! current->getData(EntryKey::Brief_Docs).trimmed().isEmpty()) {
      // only go to the detailed description if we found a brief description and not just whitespace

      briefEndsAtDot = false;
      setOutput(OutputMainDoc);

      if (isOutput) {
         QString text = QString::fromUtf8(yytext);
         addToOutput(text);
      }
   }
}

static void handleGuard(const QString &expr);

#undef   YY_INPUT
#define  YY_INPUT(buf,result,max_size) result = yyread(buf, max_size);

static int yyread(char *buf, int max_size)
{
   s_bufferPosition = buf;
   s_prevPosition   = s_inputPosition;

   //
   int len = max_size;

   const char *src = s_inputString.constData() + s_inputPosition;

   if (s_inputPosition + len >= s_inputString.size_storage()) {
      len = s_inputString.size_storage() - s_inputPosition;
   }

   memcpy(buf, src, len);
   s_inputPosition += len;

   return len;
}

/* start command character */
#define YY_NO_UNISTD_H 1
/* comment parsing states */

#define INITIAL 0
#define Comment 1
#define PageDocArg1 2
#define PageDocArg2 3
#define RelatesParam1 4
#define ClassDocArg1 5
#define ClassDocArg2 6
#define ClassDocArg3 7
#define CategoryDocArg1 8
#define ConceptDocArg1 9
#define XRefItemParam1 10
#define XRefItemParam2 11
#define XRefItemParam3 12
#define FileDocArg1 13
#define ParamArg1 14
#define EnumDocArg1 15
#define NameSpaceDocArg1 16
#define PackageDocArg1 17
#define GroupDocArg1 18
#define GroupDocArg2 19
#define SectionLabel 20
#define SectionTitle 21
#define SubpageLabel 22
#define SubpageTitle 23
#define FormatBlock 24
#define LineParam 25
#define GuardParam 26
#define GuardParamEnd 27
#define SkipGuardedSection 28
#define SkipInternal 29
#define NameParam 30
#define InGroupParam 31
#define FnParam 32
#define OverloadParam 33
#define InheritParam 34
#define ExtendsParam 35
#define ReadFormulaShort 36
#define ReadFormulaRound 37
#define ReadFormulaLong 38
#define AnchorLabel 39
#define HtmlComment 40
#define HtmlAnchor 41
#define SkipLang 42
#define CiteLabel 43
#define CopyDoc 44
#define GuardExpr 45
#define CdataSection 46

#ifndef YY_NO_UNISTD_H
/* Special case for "unistd.h", since it is non-ANSI. We include it way
 * down here because we want the user's section 1 to have been scanned first.
 * The user has a chance to override it with an option.
 */
#include <unistd.h>
#endif
    
#ifndef YY_EXTRA_TYPE
#define YY_EXTRA_TYPE void *
#endif

static int yy_init_globals ( void );

/* Accessor methods to globals.
   These are made visible to non-reentrant scanners for convenience. */

int yylex_destroy ( void );

int yyget_debug ( void );

void yyset_debug ( int debug_flag  );

YY_EXTRA_TYPE yyget_extra ( void );

void yyset_extra ( YY_EXTRA_TYPE user_defined  );

FILE *yyget_in ( void );

void yyset_in  ( FILE * _in_str  );

FILE *yyget_out ( void );

void yyset_out  ( FILE * _out_str  );

			int yyget_leng ( void );

char *yyget_text ( void );

int yyget_lineno ( void );

void yyset_lineno ( int _line_number  );

/* Macros after this point can all be overridden by user definitions in
 * section 1.
 */

#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
extern "C" int yywrap ( void );
#else
extern int yywrap ( void );
#endif
#endif

#ifndef YY_NO_UNPUT
    
    static void yyunput ( int c, char *buf_ptr  );
    
#endif

#ifndef yytext_ptr
static void yy_flex_strncpy ( char *, const char *, int );
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen ( const char * );
#endif

#ifndef YY_NO_INPUT
#ifdef __cplusplus
static int yyinput ( void );
#else
static int input ( void );
#endif

#endif

/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
#ifdef __ia64__
/* On IA-64, the buffer size is 16k, not 8k */
#define YY_READ_BUF_SIZE 16384
#else
#define YY_READ_BUF_SIZE 196608
#endif /* __ia64__ */
#endif

/* Copy whatever the last rule matched to the standard output. */
#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
 * we now use fwrite().
 */
#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
#endif

/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
 * is returned in "result".
 */
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
		{ \
		int c = '*'; \
		int n; \
		for ( n = 0; n < max_size && \
			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
			buf[n] = (char) c; \
		if ( c == '\n' ) \
			buf[n++] = (char) c; \
		if ( c == EOF && ferror( yyin ) ) \
			YY_FATAL_ERROR( "input in flex scanner failed" ); \
		result = n; \
		} \
	else \
		{ \
		errno=0; \
		while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
			{ \
			if( errno != EINTR) \
				{ \
				YY_FATAL_ERROR( "input in flex scanner failed" ); \
				break; \
				} \
			errno=0; \
			clearerr(yyin); \
			} \
		}\
\

#endif

/* No semi-colon after return; correct usage is to write "yyterminate();" -
 * we don't want an extra ';' after the "return" because that will cause
 * some compilers to complain about unreachable statements.
 */
#ifndef yyterminate
#define yyterminate() return YY_NULL
#endif

/* Number of entries by which start-condition stack grows. */
#ifndef YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#endif

/* Report a fatal error. */
#ifndef YY_FATAL_ERROR
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
#endif

/* end tables serialization structures and prototypes */

/* Default declaration of generated scanner - a define so the user can
 * easily add parameters.
 */
#ifndef YY_DECL
#define YY_DECL_IS_OURS 1

extern int yylex (void);

#define YY_DECL int yylex (void)
#endif /* !YY_DECL */

/* Code executed at the beginning of each rule, after yytext and yyleng
 * have been set up.
 */
#ifndef YY_USER_ACTION
#define YY_USER_ACTION
#endif

/* Code executed at the end of each rule. */
#ifndef YY_BREAK
#define YY_BREAK /*LINTED*/break;
#endif

#define YY_RULE_SETUP \
	if ( yyleng > 0 ) \
		YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
				(yytext[yyleng - 1] == '\n'); \
	YY_USER_ACTION

/** The main scanner function which does all the work.
 */
YY_DECL
{
	yy_state_type yy_current_state;
	char *yy_cp, *yy_bp;
	int yy_act;
    
	if ( !(yy_init) )
		{
		(yy_init) = 1;

#ifdef YY_USER_INIT
		YY_USER_INIT;
#endif

        /* Create the reject buffer large enough to save one state per allowed character. */
        if ( ! (yy_state_buf) )
            (yy_state_buf) = (yy_state_type *)yyalloc(YY_STATE_BUF_SIZE  );
            if ( ! (yy_state_buf) )
                YY_FATAL_ERROR( "out of dynamic memory in yylex()" );

		if ( ! (yy_start) )
			(yy_start) = 1;	/* first start state */

		if ( ! yyin )
			yyin = stdin;

		if ( ! yyout )
			yyout = stdout;

		if ( ! YY_CURRENT_BUFFER ) {
			yyensure_buffer_stack ();
			YY_CURRENT_BUFFER_LVALUE =
				yy_create_buffer( yyin, YY_BUF_SIZE );
		}

		yy_load_buffer_state(  );
		}

	{

  /* What can happen while parsing a comment block:
   *   commands (e.g. @page, or \page)
   *   escaped commands (e.g. @@page or \\page).
   *   formulas (e.g. \f$ \f[ \f{..)
   *   directories (e.g. \doxy\src\)
   *   autolist end. (e.g. a dot on an otherwise empty line)
   *   newlines.
   *   end of brief description due to blank line.
   *   end of brief description due to some command (@command, or <command>).
   *   words and whitespace and other characters (#,?!, etc).
   *   grouping commands (e.g. @{ and @})
   *   language switch (e.g. \~english or \~).
   *   mail address
   *   quoted text, such as "foo@bar"
   *   XML commands, <summary></summary><remarks></remarks>
   */

	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
		{
		yy_cp = (yy_c_buf_p);

		/* Support of yytext. */
		*yy_cp = (yy_hold_char);

		/* yy_bp points to the position in yy_ch_buf of the start of
		 * the current run.
		 */
		yy_bp = yy_cp;

		yy_current_state = (yy_start);
		yy_current_state += YY_AT_BOL();

		(yy_state_ptr) = (yy_state_buf);
		*(yy_state_ptr)++ = yy_current_state;

yy_match:
		do
			{
			YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
				{
				yy_current_state = (int) yy_def[yy_current_state];
				if ( yy_current_state >= 1746 )
					yy_c = yy_meta[yy_c];
				}
			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
			*(yy_state_ptr)++ = yy_current_state;
			++yy_cp;
			}
		while ( yy_current_state != 1745 );

yy_find_action:
		yy_current_state = *--(yy_state_ptr);
		(yy_lp) = yy_accept[yy_current_state];
find_rule: /* we branch to this label when backing up */
		for ( ; ; ) /* until we find what rule we matched */
			{
			if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
				{
				yy_act = yy_acclist[(yy_lp)];
				if ( yy_act & YY_TRAILING_HEAD_MASK ||
				     (yy_looking_for_trail_begin) )
					{
					if ( yy_act == (yy_looking_for_trail_begin) )
						{
						(yy_looking_for_trail_begin) = 0;
						yy_act &= ~YY_TRAILING_HEAD_MASK;
						break;
						}
					}
				else if ( yy_act & YY_TRAILING_MASK )
					{
					(yy_looking_for_trail_begin) = yy_act & ~YY_TRAILING_MASK;
					(yy_looking_for_trail_begin) |= YY_TRAILING_HEAD_MASK;
					(yy_full_match) = yy_cp;
					(yy_full_state) = (yy_state_ptr);
					(yy_full_lp) = (yy_lp);
					}
				else
					{
					(yy_full_match) = yy_cp;
					(yy_full_state) = (yy_state_ptr);
					(yy_full_lp) = (yy_lp);
					break;
					}
				++(yy_lp);
				goto find_rule;
				}
			--yy_cp;
			yy_current_state = *--(yy_state_ptr);
			(yy_lp) = yy_accept[yy_current_state];
			}

		YY_DO_BEFORE_ACTION;

do_action:	/* This label is used only to access EOF actions. */

		switch ( yy_act )
	{ /* beginning of action switch */
case 1:
YY_RULE_SETUP
{
      // escaped command
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 2:
YY_RULE_SETUP
{
      // escaped command
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 3:
YY_RULE_SETUP
{
      // mail address
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 4:
YY_RULE_SETUP
{
      // quoted text
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 5:
YY_RULE_SETUP
{
      // directory (or chain of commands)
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 6:
YY_RULE_SETUP
{
      // HTML command ends a brief description
      setOutput(OutputMainDoc);

      // continue with the same input
      REJECT;
   }
	YY_BREAK
case 7:
YY_RULE_SETUP
{
      // HTML command that ends a brief description
      if (current->m_srcLang == SrcLangExt_CSharp) {
         setOutput(OutputMainDoc);
      }

      // continue with the same input
      REJECT;
   }
	YY_BREAK
case 8:
YY_RULE_SETUP
{
      // start of a HTML style details description
      QString text = QString::fromUtf8(yytext);

      ++s_htmlDetails;

      setOutput(OutputMainDoc);
      addToOutput(text);
   }
	YY_BREAK
case 9:
YY_RULE_SETUP
{
      // end of a HTML style details description
      QString text = QString::fromUtf8(yytext);

      if (s_htmlDetails != 0) {
         --s_htmlDetails;
      }

      addToOutput(text);
   }
	YY_BREAK
case 10:
/* rule 10 can match eol */
YY_RULE_SETUP
{
   // potential start of HTML anchor
   QString text = QString::fromUtf8(yytext);

   s_htmlAnchor   = text;
   s_isHtmlAnchor = false;
   BEGIN(HtmlAnchor);
}
	YY_BREAK
case 11:
YY_RULE_SETUP
{
   // only labels that can be converted to doxypress anchor
   QString text = QString::fromUtf8(yytext);
   s_htmlAnchor += text;

   QString tag(text);

   int pos  = tag.indexOf("=");
   QChar ch = tag[pos + 1];

   QString id;

   if (ch == '\'' || ch == '"')  {
      // valid start

     int end = tag.indexOf(ch, pos + 2);

     if (end != -1) {
         // found matching end, extract id
         id = tag.mid(pos + 2, end - pos - 2);
         addAnchor(id);
     }

   } else {
     id = tag.mid(pos + 1);
     addAnchor(id);
   }

   if (! id.isEmpty() && ! s_isHtmlAnchor) {
     // only use first analogous to what is in docparser
     addToOutput("@anchor ");
     addToOutput(id);
     addToOutput(" ");

     s_isHtmlAnchor = true;
   }
 }
	YY_BREAK
case 12:
YY_RULE_SETUP
{
   QString text = QString::fromUtf8(yytext);
   s_htmlAnchor += text;
}
	YY_BREAK
case 13:
YY_RULE_SETUP
{
   QString text = QString::fromUtf8(yytext);

   if (! s_isHtmlAnchor) {
     addToOutput(s_htmlAnchor);
     addToOutput(text);

   } else if (text.length() == 1) {
     // to keep <a></a> pairs, otherwise single </a> present
     addToOutput("<a>");

   }

   BEGIN(Comment);
 }
	YY_BREAK
case 14:
/* rule 14 can match eol */
YY_RULE_SETUP
{
   // newline
   QString text = QString::fromUtf8(yytext);

   s_htmlAnchor += text;

   if (text[0] == '\n')  {
      ++yyLineNr;
   }
}
	YY_BREAK
case 15:
YY_RULE_SETUP
{
   // catch-all for anything else
   QString text = QString::fromUtf8(yytext);
   s_htmlAnchor += text;
}
	YY_BREAK
case 16:
YY_RULE_SETUP
{
      // start of a .NET XML style detailed description
      QString text = QString::fromUtf8(yytext);
      setOutput(OutputMainDoc);
      addToOutput(text);
   }
	YY_BREAK
case 17:
YY_RULE_SETUP
{
      // end of a brief or detailed description
      QString text = QString::fromUtf8(yytext);

      setOutput(OutputMainDoc);
      addToOutput(text);
   }
	YY_BREAK
case 18:
YY_RULE_SETUP
{
      // start of a .NET XML style brief description
      QString text = QString::fromUtf8(yytext);

      if (s_htmlDetails == 0) {
         setOutput(OutputBrief);
      }

      addToOutput(text);
   }
	YY_BREAK
case 19:
YY_RULE_SETUP
{
      // end of a .NET XML style detailed description
      QString text = QString::fromUtf8(yytext);

      addToOutput(text);

      if (s_htmlDetails == 0) {
         setOutput(OutputMainDoc);
      }
   }
	YY_BREAK
case 20:
YY_RULE_SETUP
{
      QString tag = QString::fromUtf8(yytext);

      int s = tag.indexOf("id=");

      if (s != -1) {
         // command has id attribute
         QChar c = tag[s + 3];

         if (c == '\'' || c == '"') {
            // valid start
            int e = tag.indexOf(c,s + 4);

            if (e != -1) {
               // found matching end

               QString id = tag.mid(s + 4, e-s-4);   // extract id
               addAnchor(id);
            }
         }
      }

      addToOutput(tag);
   }
	YY_BREAK
case 21:
YY_RULE_SETUP
{
      insidePre = true;
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 22:
YY_RULE_SETUP
{
      insidePre = false;
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 23:
YY_RULE_SETUP
{
      // RCS tag which end a brief description
      setOutput(OutputMainDoc);
      REJECT;
   }
	YY_BREAK
case 24:
YY_RULE_SETUP
{
      BEGIN(HtmlComment);
   }
	YY_BREAK
case 25:
YY_RULE_SETUP
{
      BEGIN(CdataSection);
   }
	YY_BREAK
case 26:
YY_RULE_SETUP
{
      addToOutput(" \\endinternal ");

      if (! s_processInternalDocs) {
         warn(yyFileName, yyLineNr, "Found \\endinternal without matching \\internal");
      }

      s_processInternalDocs = false;
   }
	YY_BREAK
case 27:
YY_RULE_SETUP
{
      // preserve spacing around \\internal_linebr
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 28:
YY_RULE_SETUP
{
      if (! current->m_entryName.isEmpty()) {
         current->m_traits.setTrait(Entry::Virtue::BypassUndocWarn);
      }
   }
	YY_BREAK
case 29:
YY_RULE_SETUP
{
      // simulate calling addToOutPut()
      QString text = QString::fromUtf8(yytext);
      s_docsEntry->appendData(EntryKey::Main_Docs, text);
   }
	YY_BREAK
case 30:
YY_RULE_SETUP
{
      // simulate calling addToOutPut()
      QString text = QString::fromUtf8(yytext);
      s_docsEntry->appendData(EntryKey::Main_Docs, text);
   }
	YY_BREAK
case 31:
case 32:
YY_RULE_SETUP
{
      // might be a valid command
      QString text = QString::fromUtf8(yytext);

      /* handle `\f{` and `@f{` as special cases */
      int idx = text.indexOf('{');

      if ((idx > 1) && (text[idx - 1] == 'f') && (text[idx - 2] == '\\' || text[idx - 2] =='@')) {
         REJECT;
      }

      QStringView view = QStringView(text).trimmed();

      QString cmdName;
      QStringList optList;

      if (view.contains('{')) {
         // cmd { options }

         QString tmp = view.mid(1, 2).toLower();

         if (tmp == "f{")  {
            // handle "\f{" and "@f{" elsewhere
            REJECT;
         }

         static QRegularExpression regexp("[\\\\@](\\w+)\\s*{([^}]+)}");
         QRegularExpressionMatch match = regexp.match(view);

         // remove {CMD}
         cmdName = match.captured(1);
         optList = match.captured(2).split(',');

      } else {
         // no options
         cmdName = view.mid(1);

      }

      DocCmdMapper::Cmd *cmdPtr = DocCmdMapper::map(cmdName);

      if (cmdPtr) {
         // special action is required

         int i = 0;
         while (text[i] == ' ' || text[i] == '\t') {
            ++i;
         }

         s_spaceBeforeCmd = text.left(i);

         if (cmdPtr->endsBrief && ! (inContext == OutputXRef && cmdName == "parblock")) {
            briefEndsAtDot = false;

            // this command forces the end of brief description
            setOutput(OutputMainDoc);
         }

         if (cmdPtr->func && cmdPtr->func(cmdName, optList)) {
            // handler wants to stop and reenter this parser

            s_parseMore = true;

            s_inputPosition = s_prevPosition + (yy_bp - s_bufferPosition);
            yyterminate();

         } else if (cmdPtr->func == nullptr) {
            // command without handler is processed later by docparser
            addToOutput(text);
         }

      } else {
         // some command was found, just pass it on
         addToOutput(text);
      }
   }
	YY_BREAK
case 33:
YY_RULE_SETUP
{
      // escaped formula command
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 34:
YY_RULE_SETUP
{
      // language switch command
      static const QString outputLanguage = Config::getEnum("output-language");

      QString text   = QString::fromUtf8(yytext);
      QString langId = text.trimmed().mid(2);

      if (! langId.isEmpty() && outputLanguage.compare(langId, Qt::CaseInsensitive) != 0) {
         // enable language specific section
         BEGIN(SkipLang);
      }
   }
	YY_BREAK
case 35:
YY_RULE_SETUP
{
      // start of a formula with custom environment
      QString text = QString::fromUtf8(yytext);

      // this command forces the end of brief description
      setOutput(OutputMainDoc);

      formulaText = "\\begin";
      formulaEnv = text.trimmed().mid(2);

      if (formulaEnv.at(formulaEnv.length() - 1) == '{') {
         // remove trailing open brace
         formulaEnv = formulaEnv.left(formulaEnv.length() - 1);
      }

      formulaText += formulaEnv;
      formulaNewLines = 0;
      BEGIN(ReadFormulaLong);
   }
	YY_BREAK
case 36:
YY_RULE_SETUP
{
      // start of a inline formula
      formulaText     = "$";
      formulaNewLines = 0;
      BEGIN(ReadFormulaShort);
   }
	YY_BREAK
case 37:
YY_RULE_SETUP
{
      // start of a inline formula
      formulaText     = QString();
      formulaNewLines = 0;

      BEGIN(ReadFormulaRound);
   }
	YY_BREAK
case 38:
YY_RULE_SETUP
{
      // start of a block formula,

      // command forces the end of brief description
      setOutput(OutputMainDoc);

      formulaText      = "\\[";
      formulaNewLines  = 0;
      BEGIN(ReadFormulaLong);
   }
	YY_BREAK
case 39:
YY_RULE_SETUP
{
      // beginning of a group
      openGroup(current, yyFileName, yyLineNr);
   }
	YY_BREAK
case 40:
YY_RULE_SETUP
{
      // end of a group
      QString text = QString::fromUtf8(yytext);

      closeGroup(current, yyFileName, yyLineNr, true);

      s_memberGroupHeader.clear();
      s_parseMore    = true;
      s_needNewEntry = true;

      s_inputPosition = s_prevPosition + (yy_bp - s_bufferPosition) + text.length();
      yyterminate();
   }
	YY_BREAK
case 41:
YY_RULE_SETUP
{
      // escaped character
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 42:
YY_RULE_SETUP
{
      // normal word
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 43:
/* rule 43 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
YY_LINENO_REWIND_TO(yy_cp - 1);
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      // explicit end autolist: e.g "  ."
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 44:
case 45:
YY_RULE_SETUP
{
      // start of autolist
      if (! Doxy_Globals::markdownSupport) {
         REJECT;

      } else {

         if (inContext != OutputXRef) {
            briefEndsAtDot = false;
            setOutput(OutputMainDoc);
         }

         QString text = QString::fromUtf8(yytext);
         addToOutput(text);
      }
   }
	YY_BREAK
case 46:
YY_RULE_SETUP
{
      // start of autolist
      if (inContext != OutputXRef) {
         briefEndsAtDot = false;
         setOutput(OutputMainDoc);
      }

      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 47:
/* rule 47 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
YY_LINENO_REWIND_TO(yy_cp - 1);
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      // horizontal line (dashed)
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 48:
YY_RULE_SETUP
{
      // escaped mdash
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 49:
YY_RULE_SETUP
{
      // escaped mdash
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 50:
YY_RULE_SETUP
{
      // mdash
      QString text = QString::fromUtf8(yytext);
      addToOutput(insidePre || Doxy_Globals::markdownSupport ? text : "&mdash;");
   }
	YY_BREAK
case 51:
YY_RULE_SETUP
{
      // ndash
      QString text = QString::fromUtf8(yytext);
      addToOutput(insidePre || Doxy_Globals::markdownSupport ? text : "&ndash;");
   }
	YY_BREAK
case 52:
YY_RULE_SETUP
{
      // numbered item
      QString text = QString::fromUtf8(yytext);

      if (inContext != OutputXRef) {
         // this command forces the end of brief description
         setOutput(OutputMainDoc);
      }

      addToOutput(text);
   }
	YY_BREAK
case 53:
YY_RULE_SETUP
{
      // . at start or in the middle of a word, or ellipsis
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 54:
YY_RULE_SETUP
{
      // . with escaped space
      QString text = QString::fromUtf8(yytext);

      addToOutput(text[0]);
      addToOutput(text[2]);
   }
	YY_BREAK
case 55:
YY_RULE_SETUP
{
      // . with some syntax like "e.g.," or "e.g.:"
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 56:
YY_RULE_SETUP
{
      // ellipsis with escaped space
      addToOutput("... ");
   }
	YY_BREAK
case 57:
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      // internal ellipsis
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 58:
/* rule 58 can match eol */
YY_RULE_SETUP
{
      // at least one blank line or blank line command

      QString text = QString::fromUtf8(yytext);

      if (inContext == OutputXRef) {
         // need to put the newlines after ending the XRef section

         if (! s_insideParBlock) {
            setOutput(OutputMainDoc);
         }

         for (int i = 0; i < text.length();  ) {
            if (text[i] == '\n') {
               addToOutput('\n');
               ++i;

            } else if (text.mid(i) == "\\internal_linebr")  {
               addToOutput("\\internal_linebr");
               i += 16;

            } else  {
               ++i;
            }
         }

      } else if (inContext != OutputBrief) {

         for (int i = 0; i< text.length(); ) {
            if (text[i] == '\n') {
               addToOutput('\n');
               i++;

            } else if (text.mid(i) == "\\internal_linebr")  {
               addToOutput("\\internal_linebr");
               i += 16;

            } else  {
               i++;

            }
         }

         setOutput(OutputMainDoc);

      } else {
          // inContext == OutputBrief, switch from brief to main docs
         endBrief(true);
      }

      lineCount();
   }
	YY_BREAK
case 59:
YY_RULE_SETUP
{
      // potential end of a JavaDoc style comment
      QString text = QString::fromUtf8(yytext);
      addToOutput(text[0]);

      if (briefEndsAtDot) {
         briefEndsAtDot = false;
         setOutput(OutputMainDoc);
      }
   }
	YY_BREAK
case 60:
/* rule 60 can match eol */
YY_RULE_SETUP
{
      // newline
      QString text = QString::fromUtf8(yytext);

      addToOutput('\n');

      if (text[0] == '\n') {
         ++yyLineNr;
      }
   }
	YY_BREAK
case 61:
YY_RULE_SETUP
{
      // utf-8 code point
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 62:
YY_RULE_SETUP
{
      // catch all for anything else
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
/* --------------   Rules for handling HTML comments ----------- */
case 63:
YY_RULE_SETUP
{
      BEGIN( Comment );
   }
	YY_BREAK
case 64:
/* rule 64 can match eol */
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);

      if (text[0] == '\n') {
         addToOutput('\n');
         ++yyLineNr;
      }
   }
	YY_BREAK
case 65:
YY_RULE_SETUP
{
      // ignore unimportant characters
   }
	YY_BREAK
case 66:
YY_RULE_SETUP
{
      // ignore every else
   }
	YY_BREAK
case 67:
YY_RULE_SETUP
{
      BEGIN( Comment );
   }
	YY_BREAK
case 68:
/* rule 68 can match eol */
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);

      addToOutput('\n');

      if (text[0] == '\n') {
         ++yyLineNr;
      }
   }
	YY_BREAK
case 69:
YY_RULE_SETUP
{
      // the special XML characters for iwhich the CDATA section is especially used
      QString text = QString::fromUtf8(yytext);
      addToOutput('\\');
      addToOutput(text[0]);
   }
	YY_BREAK
case 70:
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);
   }
	YY_BREAK
case 71:
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);
      addToOutput(text[0]);
   }
	YY_BREAK
/* --------------   Rules for handling formulas ---------------- */
case 72:
YY_RULE_SETUP
{
      // end of inline formula
      formulaText += "$";
      addToOutput(" " + addFormula());
      BEGIN(Comment);
   }
	YY_BREAK
case 73:
YY_RULE_SETUP
{
      // end of inline formula
      addToOutput(" " + addFormula());
      BEGIN(Comment);
   }
	YY_BREAK
case 74:
YY_RULE_SETUP
{
      // end of block formula
      formulaText += "\\]";
      addToOutput(" " + addFormula());
      BEGIN(Comment);
   }
	YY_BREAK
case 75:
YY_RULE_SETUP
{
      // end of custom env formula
      formulaText += "\\end";
      formulaText += formulaEnv;
      addToOutput(" " + addFormula());
      BEGIN(Comment);
   }
	YY_BREAK
case 76:
YY_RULE_SETUP
{
      // any non-special character
      QString text = QString::fromUtf8(yytext);
      formulaText += text;
   }
	YY_BREAK
case 77:
/* rule 77 can match eol */
YY_RULE_SETUP
{
      // new line
      QString text = QString::fromUtf8(yytext);

      formulaNewLines++;
      formulaText += text[0];
      yyLineNr++;
   }
	YY_BREAK
case 78:
YY_RULE_SETUP
{
      // any other character
      QString text = QString::fromUtf8(yytext);
      formulaText += text[0];
   }
	YY_BREAK
/* ------------ handle argument of enum command --------------- */
case 79:
/* rule 79 can match eol */
YY_RULE_SETUP
{
      // handle argument
      QString text = QString::fromUtf8(yytext);
      current->m_entryName = text;
      BEGIN( Comment );
   }
	YY_BREAK
case 80:
/* rule 80 can match eol */
YY_RULE_SETUP
{
      // line continuation
      yyLineNr++;
      addToOutput('\n');
   }
	YY_BREAK
case 81:
/* rule 81 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);

      warn(yyFileName, yyLineNr, "Missing argument after \\enum");
      unputString(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 82:
YY_RULE_SETUP
{
      // ignore other stuff
   }
	YY_BREAK
/* ------------ handle argument of namespace command --------------- */
case 83:
/* rule 83 can match eol */
YY_RULE_SETUP
{
      // handle argument
      QString text  = QString::fromUtf8(yytext);

      lineCount();
      current->m_entryName = substitute(removeRedundantWhiteSpace(text),".", "::");

      BEGIN( Comment );
   }
	YY_BREAK
case 84:
/* rule 84 can match eol */
YY_RULE_SETUP
{
      // line continuation
      yyLineNr++;
      addToOutput('\n');
   }
	YY_BREAK
case 85:
/* rule 85 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);

      warn(yyFileName, yyLineNr, "Missing argument after \\namespace");
      unputString(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 86:
YY_RULE_SETUP
{
      // ignore other stuff
   }
	YY_BREAK
/* ------------ handle argument of package command --------------- */
case 87:
YY_RULE_SETUP
{
      // handle argument
      QString text = QString::fromUtf8(yytext);
      current->m_entryName = text;
      BEGIN( Comment );
   }
	YY_BREAK
case 88:
/* rule 88 can match eol */
YY_RULE_SETUP
{
      // line continuation
      yyLineNr++;
      addToOutput('\n');
   }
	YY_BREAK
case 89:
/* rule 89 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);

      warn(yyFileName, yyLineNr, "Missing argument after \\package");
      unputString(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 90:
YY_RULE_SETUP
{
      // ignore other stuff
   }
	YY_BREAK
/* ------ handle argument of class/struct/union command --------------- */
case 91:
/* rule 91 can match eol */
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);

      lineCount();
      current->m_entryName = substitute(removeRedundantWhiteSpace(text),".","::");

      BEGIN( ClassDocArg2 );
   }
	YY_BREAK
case 92:
/* rule 92 can match eol */
YY_RULE_SETUP
{
      // first argument
      QString text = QString::fromUtf8(yytext);

      lineCount();
      current->m_entryName = substitute(text,".","::");

      if (current->section == Entry::PROTOCOLDOC_SEC) {
         current->m_entryName += "-p";
      }

      // prepend outer scope name
      BEGIN( ClassDocArg2 );
   }
	YY_BREAK
case 93:
/* rule 93 can match eol */
YY_RULE_SETUP
{
      QString text  = QString::fromUtf8(yytext);

      lineCount();
      current->m_entryName = substitute(text,".","::");

      BEGIN( ClassDocArg2 );
   }
	YY_BREAK
case 94:
/* rule 94 can match eol */
YY_RULE_SETUP
{
      // line continuation
      yyLineNr++;
      addToOutput('\n');
   }
	YY_BREAK
case 95:
/* rule 95 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);

      warn(yyFileName, yyLineNr, "Missing argument after \\%s",  csPrintable(s_currentCommand));
      unputString(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 96:
YY_RULE_SETUP
{
      // ignore other stuff
   }
	YY_BREAK
case 97:
/* rule 97 can match eol */
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);
      unputString(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 98:
YY_RULE_SETUP
{
      // second argument, include file
      QString text = QString::fromUtf8(yytext);
      current->setData(EntryKey::Include_File, text);
      BEGIN( ClassDocArg3 );
   }
	YY_BREAK
case 99:
/* rule 99 can match eol */
YY_RULE_SETUP
{
      // line continuation
      yyLineNr++;
      addToOutput('\n');
   }
	YY_BREAK
case 100:
YY_RULE_SETUP
{
      // ignore other stuff
   }
	YY_BREAK
case 101:
YY_RULE_SETUP
{
      // third argument, include file name
      QString text = QString::fromUtf8(yytext);
      current->setData(EntryKey::Include_Name, text);
      BEGIN( Comment );
   }
	YY_BREAK
case 102:
/* rule 102 can match eol */
YY_RULE_SETUP
{
      // line continuation
      yyLineNr++;
      addToOutput('\n');
   }
	YY_BREAK
case 103:
/* rule 103 can match eol */
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);
      unputString(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 104:
YY_RULE_SETUP
{
      // ignore other stuff
   }
	YY_BREAK
/* --------- handle arguments of concept command ------------------- */
case 105:
/* rule 105 can match eol */
YY_RULE_SETUP
{
      // first argument, concept name
      QString text = QString::fromUtf8(yytext);
      current->m_entryName = substitute(text, ".", "::");

      BEGIN(Comment);
   }
	YY_BREAK
case 106:
/* rule 106 can match eol */
YY_RULE_SETUP
{
      ++yyLineNr;
      addToOutput('\n');
   }
	YY_BREAK
case 107:
/* rule 107 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);

      warn(yyFileName, yyLineNr, "Missing argument after \\concept");
      unputString(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 108:
YY_RULE_SETUP
{
      // ignore other stuff
   }
	YY_BREAK
/* --------- handle arguments of {def,add,weak} group commands --------- */
case 109:
YY_RULE_SETUP
{
      // group name
      QString text  = QString::fromUtf8(yytext);
      current->m_entryName = text;

      // lastDefGroup.groupname = text;
      // lastDefGroup.pri = current->groupingPri();
      // the .html stuff is for Qt compatibility

      if (current->m_entryName.endsWith(".html")) {
         current->m_entryName = current->m_entryName.left(current->m_entryName.length() - 5);
      }

      current->setData(EntryKey::Member_Type, "");
      BEGIN(GroupDocArg2);
   }
	YY_BREAK
case 110:
/* rule 110 can match eol */
YY_RULE_SETUP
{
      // line continuation
      ++yyLineNr;
      addToOutput('\n');
   }
	YY_BREAK
case 111:
/* rule 111 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);

      warn(yyFileName, yyLineNr, "Missing group name after %s", csPrintable(current->groupDocCmd()) );
      unputString(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 112:
YY_RULE_SETUP
{
      // ignore other stuff
   }
	YY_BREAK
case 113:
/* rule 113 can match eol */
YY_RULE_SETUP
{
      // line continuation
      ++yyLineNr;
      addToOutput('\n');
   }
	YY_BREAK
case 114:
YY_RULE_SETUP
{
      // title (stored in type)
      QString text = QString::fromUtf8(yytext);
      current->appendData(EntryKey::Member_Type, text.trimmed());
   }
	YY_BREAK
case 115:
/* rule 115 can match eol */
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);

      if (current->groupDocType == Entry::GROUPDOC_NORMAL && current->getData(EntryKey::Member_Type).isEmpty()) {
         // defgroup requires second argument
         warn(yyFileName, yyLineNr, "Missing title after \\defgroup %s", csPrintable(current->m_entryName) );
      }

      unputString(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 116:
YY_RULE_SETUP
{
      // title (stored in type)
      QString text = QString::fromUtf8(yytext);
      current->appendData(EntryKey::Member_Type, text.trimmed());
   }
	YY_BREAK
/* --------- handle arguments of page/mainpage command ------------------- */
case 117:
YY_RULE_SETUP
{
      // first argument, page name
      QString text = QString::fromUtf8(yytext);

      current->m_entryName = stripQuotes(text);
      current->setData(EntryKey::Member_Args, QString());

      BEGIN( PageDocArg2 );
   }
	YY_BREAK
case 118:
/* rule 118 can match eol */
YY_RULE_SETUP
{
      ++yyLineNr;
      addToOutput('\n');
   }
	YY_BREAK
case 119:
/* rule 119 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);

      warn(yyFileName, yyLineNr, "Missing argument after \\page");
      unputString(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 120:
YY_RULE_SETUP
{
      // ignore other stuff
   }
	YY_BREAK
case 121:
/* rule 121 can match eol */
YY_RULE_SETUP
{
      // second argument; page title
      QString text = QString::fromUtf8(yytext);
      unputString(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 122:
YY_RULE_SETUP
{

      QString text = QString::fromUtf8(yytext);

      text = substitute(substitute(text, "@<","&lt;"),  "@>", "&gt;");
      text = substitute(substitute(text, "\\<","&lt;"), "\\>","&gt;");

      current->appendData(EntryKey::Member_Args, text);
   }
	YY_BREAK
case 123:
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);
      current->appendData(EntryKey::Member_Args, text);
   }
	YY_BREAK
/* --------- handle arguments of the param command ------------ */
case 124:
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);

      addToOutput(text);
   }
	YY_BREAK
case 125:
YY_RULE_SETUP
{
      addToOutput(" , ");
   }
	YY_BREAK
case 126:
/* rule 126 can match eol */
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);

      if (text[0] == '\n') {
         ++yyLineNr;
      }

      addToOutput(" ");
    }
	YY_BREAK
case 127:
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);

      addToOutput(text);
      BEGIN( Comment );
   }
	YY_BREAK
case 128:
YY_RULE_SETUP
{
      unput(yytext[0]);
      BEGIN( Comment );
   }
	YY_BREAK
/* --------- handle arguments of the file/dir/example command ------------ */
case 129:
/* rule 129 can match eol */
YY_RULE_SETUP
{
      // no file name specified
      QString text = QString::fromUtf8(yytext);
      unputString(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 130:
YY_RULE_SETUP
{
      // first argument; name
      QString text = QString::fromUtf8(yytext);
      current->m_entryName = stripQuotes(text);
      BEGIN( Comment );
   }
	YY_BREAK
case 131:
/* rule 131 can match eol */
YY_RULE_SETUP
{
      yyLineNr++;
      addToOutput('\n');
   }
	YY_BREAK
case 132:
YY_RULE_SETUP
{
      // ignore other stuff
   }
	YY_BREAK
/* --------- handle arguments of the xrefitem command ------------ */
case 133:
YY_RULE_SETUP
{
      // first argument
      newXRefItemKey = QString::fromUtf8(yytext);
      setOutput(OutputXRef);

      BEGIN(XRefItemParam2);
   }
	YY_BREAK
case 134:
/* rule 134 can match eol */
YY_RULE_SETUP
{
      // line continuation
      yyLineNr++;
      addToOutput('\n');
   }
	YY_BREAK
case 135:
/* rule 135 can match eol */
YY_RULE_SETUP
{
      // missing arguments
      QString text = QString::fromUtf8(yytext);
      warn(yyFileName, yyLineNr, "Missing first argument of \\xrefitem");

      if (text[0] == '\n') {
         ++yyLineNr;
      }

      addToOutput('\n');
      inContext = OutputMainDoc;

      BEGIN( Comment );
   }
	YY_BREAK
case 136:
YY_RULE_SETUP
{
      // ignore other stuff
   }
	YY_BREAK
case 137:
YY_RULE_SETUP
{
      // second argument
      QString text = QString::fromUtf8(yytext);
      xrefItemTitle = stripQuotes(text);
      BEGIN(XRefItemParam3);
   }
	YY_BREAK
case 138:
/* rule 138 can match eol */
YY_RULE_SETUP
{
      // line continuation
      yyLineNr++;
      addToOutput('\n');
   }
	YY_BREAK
case 139:
/* rule 139 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);
      warn(yyFileName, yyLineNr, "Missing second argument of \\xrefitem");

      if (text[0] == '\n') {
         ++yyLineNr;
      }

      addToOutput('\n');
      inContext = OutputMainDoc;

      BEGIN( Comment );
   }
	YY_BREAK
case 140:
YY_RULE_SETUP
{
      // ignore other stuff
   }
	YY_BREAK
case 141:
YY_RULE_SETUP
{
      // third argument
      QString text = QString::fromUtf8(yytext);

      xrefListTitle = stripQuotes(text);
      xrefKind = XRef_Item;

      BEGIN( Comment );
   }
	YY_BREAK
case 142:
/* rule 142 can match eol */
YY_RULE_SETUP
{
      // line continuation
      yyLineNr++;
      addToOutput('\n');
   }
	YY_BREAK
case 143:
/* rule 143 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);
      warn(yyFileName, yyLineNr,"Missing third argument of \\xrefitem");

      if (text[0] == '\n') {
         ++yyLineNr;
      }

      addToOutput('\n');
      inContext = OutputMainDoc;

      BEGIN( Comment );
   }
	YY_BREAK
case 144:
YY_RULE_SETUP
{
      // ignore other stuff
   }
	YY_BREAK
/* ----- handle arguments of the relates(also)/memberof command ------- */
case 145:
YY_RULE_SETUP
{
      // argument
      QString text = QString::fromUtf8(yytext);

      current->setData(EntryKey::Related_Class, text);
      BEGIN( Comment );
   }
	YY_BREAK
case 146:
/* rule 146 can match eol */
YY_RULE_SETUP
{
      // line continuation
      yyLineNr++;
      addToOutput('\n');
   }
	YY_BREAK
case 147:
/* rule 147 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);

      warn(yyFileName, yyLineNr, "Missing argument of \\%s command", csPrintable(s_currentCommand));
      unputString(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 148:
YY_RULE_SETUP
{
      // ignore other stuff
   }
	YY_BREAK
/* ----- handle arguments of the relates(also)/addindex commands ----- */
case 149:
/* rule 149 can match eol */
YY_RULE_SETUP
{
      // end of argument
      QString text = QString::fromUtf8(yytext);
      unputString(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 150:
/* rule 150 can match eol */
YY_RULE_SETUP
{
      // line continuation
      yyLineNr++;
      addToOutput('\n');
   }
	YY_BREAK
case 151:
YY_RULE_SETUP
{
      // ignore other stuff
      QString text = QString::fromUtf8(yytext);
      addToOutput(text[0]);
   }
	YY_BREAK
/* ----- handle arguments of the section/subsection/.. commands ------- */
case 152:
YY_RULE_SETUP
{
      // first argument
      QString text = QString::fromUtf8(yytext);

      s_sectionLabel = text;

      addToOutput(text);
      s_sectionTitle.clear();

      BEGIN(SectionTitle);
   }
	YY_BREAK
case 153:
/* rule 153 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);

      warn(yyFileName, yyLineNr, "\\section command has no label");

      if (text[0] == '\n') {
         ++yyLineNr;
      }

      addToOutput('\n');

      BEGIN( Comment );
   }
	YY_BREAK
case 154:
YY_RULE_SETUP
{
      // invalid character for section label
      warn(yyFileName, yyLineNr, "Invalid or missing section label");
      BEGIN(Comment);
   }
	YY_BREAK
case 155:
/* rule 155 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
YY_LINENO_REWIND_TO(yy_cp - 1);
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      // end of section title
      QString text = QString::fromUtf8(yytext);

      addSection();
      addToOutput(text);

      BEGIN(Comment);
   }
	YY_BREAK
case 156:
YY_RULE_SETUP
{
      // escaped end of section title
      QString text = QString::fromUtf8(yytext);

      s_sectionTitle += text;
   }
	YY_BREAK
case 157:
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
(yy_c_buf_p) = yy_cp -= 16;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      // end of section title
      QString text = QString::fromUtf8(yytext);

      addSection();
      addToOutput(text);
      BEGIN(Comment);
   }
	YY_BREAK
case 158:
/* rule 158 can match eol */
YY_RULE_SETUP
{
      // line continuation
      ++yyLineNr;
      addToOutput('\n');
   }
	YY_BREAK
case 159:
YY_RULE_SETUP
{
      // any character without special meaning
      QString text = QString::fromUtf8(yytext);

      s_sectionTitle += text;
      addToOutput(text);
   }
	YY_BREAK
case 160:
YY_RULE_SETUP
{
      // unescape escaped command
      QString text = QString::fromUtf8(yytext);

      s_sectionTitle += text.mid(1);
      addToOutput(text);
   }
	YY_BREAK
case 161:
YY_RULE_SETUP
{
      // unescape escaped character
      QString text = QString::fromUtf8(yytext);

      s_sectionTitle += text[1];
      addToOutput(text);
   }
	YY_BREAK
case 162:
YY_RULE_SETUP
{
      // anything else
      QString text = QString::fromUtf8(yytext);

      s_sectionTitle += text;
      addToOutput(text[0]);
   }
	YY_BREAK
/* ----- handle arguments of the subpage command ------- */
case 163:
YY_RULE_SETUP
{
      // first argument
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);

      // we add subpage labels as a kind of "inheritance" relation to prevent
      // needing to add another list to the Entry class.

      current->extends.append(BaseInfo(text, Public, Normal));
      BEGIN(SubpageTitle);
   }
	YY_BREAK
case 164:
/* rule 164 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);
      warn(yyFileName, yyLineNr, "\\subpage command has no label");

      if (text[0] == '\n') {
         ++yyLineNr;
      }

      addToOutput('\n');

      BEGIN( Comment );
   }
	YY_BREAK
case 165:
YY_RULE_SETUP
{
      unput(yytext[0]);
      BEGIN( Comment );
   }
	YY_BREAK
case 166:
/* rule 166 can match eol */
YY_RULE_SETUP
{
      // no title, end command
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 167:
YY_RULE_SETUP
{
      // add title, end of command
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 168:
YY_RULE_SETUP
{
      // no title, end of command
      unput(yytext[0]);
      BEGIN( Comment );
   }
	YY_BREAK
/* ----- handle arguments of the anchor command ------- */
case 169:
YY_RULE_SETUP
{
      // found argument
      QString text = QString::fromUtf8(yytext);

      addAnchor(text);
      addToOutput(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 170:
/* rule 170 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);
      warn(yyFileName, yyLineNr, "\\anchor command has no label");

      if (text[0] == '\n') {
         ++yyLineNr;
      }

      addToOutput('\n');
      BEGIN( Comment );
   }
	YY_BREAK
case 171:
YY_RULE_SETUP
{
      // invalid character for anchor label
      warn(yyFileName, yyLineNr, "Invalid or missing anchor label");
      BEGIN(Comment);
   }
	YY_BREAK
/* ----- handle arguments of the preformatted block commands ------- */
case 172:
/* rule 172 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
YY_LINENO_REWIND_TO(yy_cp - 1);
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      // possible ends
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);

      if (text.mid(4) == s_blockName)  {
         // found end of the block
         BEGIN(Comment);
      }
   }
	YY_BREAK
case 173:
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);

      if (s_blockName == "startuml")   {
         // found end of the block
         BEGIN(Comment);
      }
   }
	YY_BREAK
case 174:
YY_RULE_SETUP
{
      // some word
      QString text = QString::fromUtf8(yytext);

      addToOutput(text);
   }
	YY_BREAK
case 175:
/* rule 175 can match eol */
YY_RULE_SETUP
{
      // new line
      QString text = QString::fromUtf8(yytext);

      if (text[0] == '\n') {
         ++yyLineNr;
      }

      addToOutput('\n');
   }
	YY_BREAK
case 176:
YY_RULE_SETUP
{
      // */ (editor syntax fix)
      // start of a C-comment
      QString text = QString::fromUtf8(yytext);

      if (! (s_blockName == "code" || s_blockName == "verbatim")) {
         ++s_commentCount;
      }
      addToOutput(text);
   }
	YY_BREAK
case 177:
YY_RULE_SETUP
{
      // end of a C-comment
      QString text = QString::fromUtf8(yytext);
      addToOutput(text);

      if (! (s_blockName == "code" || s_blockName == "verbatim")) {
         s_commentCount--;

         if (s_commentCount < 0) {
            warn(yyFileName, yyLineNr, "Found */ without matching /* while inside a \\%s block. "
               "Perhaps there is a missing \\end%s?\n", csPrintable(s_blockName), csPrintable(s_blockName));
         }
      }
   }
	YY_BREAK
case 178:
YY_RULE_SETUP
{
      // */ (editor syntax fix)
      QString text = QString::fromUtf8(yytext);
      addToOutput(text[0]);
   }
	YY_BREAK
case YY_STATE_EOF(FormatBlock):
{
      QString endTag = "end" + s_blockName;

      if (s_blockName == "startuml") {
         endTag = "enduml";
      }

      warn(yyFileName, yyLineNr, "Reached end of comment while inside a \\%s block, check for missing \\%s tag",
                 csPrintable(s_blockName), csPrintable(endTag) );

      yyterminate();
   }
	YY_BREAK
/* ----- handle arguments of if/ifnot commands ------- */
case 179:
YY_RULE_SETUP
{
      s_guardExpr  = QString::fromUtf8(yytext);
      s_roundCount = 1;

      BEGIN(GuardExpr);
   }
	YY_BREAK
case 180:
/* rule 180 can match eol */
YY_RULE_SETUP
{
      s_guardExpr += QString::fromUtf8(yytext);
      lineCount();
   }
	YY_BREAK
case 181:
YY_RULE_SETUP
{
      s_guardExpr += QString::fromUtf8(yytext);
      ++s_roundCount;
   }
	YY_BREAK
case 182:
YY_RULE_SETUP
{
      s_guardExpr += QString::fromUtf8(yytext);
      --s_roundCount;

      if (s_roundCount == 0) {
         handleGuard(s_guardExpr);
      }
   }
	YY_BREAK
case 183:
/* rule 183 can match eol */
YY_RULE_SETUP
{
      warn(yyFileName, yyLineNr, "Invalid expression '%s' for guard", csPrintable(s_guardExpr));
      unput(yytext[0]);
      BEGIN(GuardParam);
   }
	YY_BREAK
case 184:
YY_RULE_SETUP
{
      // parameter of if/ifnot guard
      QString text = QString::fromUtf8(yytext);
      handleGuard(text);
   }
	YY_BREAK
case 185:
/* rule 185 can match eol */
YY_RULE_SETUP
{
      // end of argument
      QString text = QString::fromUtf8(yytext);

      if (text[0] == '\n') {
         ++yyLineNr;
      }

      BEGIN( Comment );
   }
	YY_BREAK
case 186:
/* rule 186 can match eol */
YY_RULE_SETUP
{
      // line continuation
      ++yyLineNr;
      addToOutput('\n');
   }
	YY_BREAK
case 187:
YY_RULE_SETUP
{
      // ignore other stuff
      QString text = QString::fromUtf8(yytext);
      addToOutput(text[0]);
   }
	YY_BREAK
case 188:
/* rule 188 can match eol */
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);

      lineCount();
      s_spaceBeforeIf.clear();

      BEGIN(Comment);
   }
	YY_BREAK
case 189:
YY_RULE_SETUP
{
      if (! s_spaceBeforeIf.isEmpty()) {
         addToOutput(s_spaceBeforeIf);
      }

      s_spaceBeforeIf.clear();
      BEGIN(Comment);
   }
	YY_BREAK
case 190:
YY_RULE_SETUP
{
      unput(yytext[0]);
      BEGIN(Comment);
   }
	YY_BREAK
/* ----- handle skipping of conditional sections ------- */
case 191:
/* rule 191 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
YY_LINENO_REWIND_TO(yy_cp - 1);
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      s_guardType = Guard_IfNot;
      BEGIN( GuardParam );
   }
	YY_BREAK
case 192:
/* rule 192 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
YY_LINENO_REWIND_TO(yy_cp - 1);
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      s_guardType = Guard_If;
      BEGIN( GuardParam );
   }
	YY_BREAK
case 193:
/* rule 193 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
YY_LINENO_REWIND_TO(yy_cp - 1);
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      if (s_guards.isEmpty()) {
         warn(yyFileName,yyLineNr, "Found \\endif without matching start command");

       } else {
         GuardedSection s   = s_guards.pop();
         bool parentVisible = s.parentVisible();

         if (parentVisible) {
            s_isEnabledSection = true;
            BEGIN( GuardParamEnd );
         }
      }
   }
	YY_BREAK
case 194:
/* rule 194 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
YY_LINENO_REWIND_TO(yy_cp - 1);
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      if (s_guards.isEmpty()) {
         warn(yyFileName, yyLineNr, "Found \\else without matching start command");

      } else {

         if (! s_isEnabledSection && s_guards.top().parentVisible()) {
            s_guards.pop();
            s_guards.push(GuardedSection(true,true));

            s_isEnabledSection = true;
            BEGIN( GuardParamEnd );
         }
      }
   }
	YY_BREAK
case 195:
/* rule 195 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
YY_LINENO_REWIND_TO(yy_cp - 1);
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      if (s_guards.isEmpty()) {
         warn(yyFileName,yyLineNr, "Found \\elseif without matching start command");

       } else {

         if (! s_isEnabledSection && s_guards.top().parentVisible()) {
            s_guardType = Guard_If;
            s_guards.pop();

            BEGIN( GuardParam );
         }
      }
   }
	YY_BREAK
case 196:
/* rule 196 can match eol */
YY_RULE_SETUP
{
      // skip line
      QString text = QString::fromUtf8(yytext);

      if (text[0] == '\n') {
         yyLineNr++;
      }
   }
	YY_BREAK
case 197:
YY_RULE_SETUP
{
      // skip non-special characters
   }
	YY_BREAK
case 198:
YY_RULE_SETUP
{
      // any other character
   }
	YY_BREAK
/* ----- handle skipping of internal section ------- */
case 199:
/* rule 199 can match eol */
YY_RULE_SETUP
{
      // skip line
      QString text = QString::fromUtf8(yytext);

      if (text[0] == '\n')  {
         yyLineNr++;
      }

      addToOutput('\n');
   }
	YY_BREAK
case 200:
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
(yy_c_buf_p) = yy_cp = yy_bp + 3;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      s_condCount++;
   }
	YY_BREAK
case 201:
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
(yy_c_buf_p) = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      s_condCount++;
   }
	YY_BREAK
case 202:
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      s_condCount--;

      if (s_condCount < 0 )   {
         // handle conditional section around \internal

         unput('\\');
         BEGIN(Comment);
      }
   }
	YY_BREAK
case 203:
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      if (s_sectionLevel > 0 ) {
         unput('\\');
         BEGIN(Comment);
      }
   }
	YY_BREAK
case 204:
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      if (s_sectionLevel > 1)  {
         unput('\\');
         BEGIN(Comment);
      }
   }
	YY_BREAK
case 205:
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      if (s_sectionLevel > 2) {
         unput('\\');
         BEGIN(Comment);
      }
   }
	YY_BREAK
case 206:
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
(yy_c_buf_p) = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
{
      if (s_sectionLevel > 3) {
         unput('\\');
         BEGIN(Comment);
      }
   }
	YY_BREAK
case 207:
YY_RULE_SETUP
{
      BEGIN(Comment);
   }
	YY_BREAK
case 208:
YY_RULE_SETUP
{
      // skip non-special characters
   }
	YY_BREAK
case 209:
YY_RULE_SETUP
{
      // any other character
   }
	YY_BREAK
/* ----- handle argument of name command ------- */
case 210:
/* rule 210 can match eol */
YY_RULE_SETUP
{
      // end of argument
      QString text = QString::fromUtf8(yytext);
      unputString(text);

      BEGIN(Comment);
   }
	YY_BREAK
case 211:
/* rule 211 can match eol */
YY_RULE_SETUP
{
      // line continuation
      yyLineNr++;
      addToOutput('\n');
      s_memberGroupHeader += ' ';
   }
	YY_BREAK
case 212:
YY_RULE_SETUP
{
      // ignore other stuff
      QString text = QString::fromUtf8(yytext);
      s_memberGroupHeader  += text[0];
      current->m_entryName += text[0];
   }
	YY_BREAK
/* ----- handle argument of ingroup command ------- */
case 213:
YY_RULE_SETUP
{
      // group id
      QString text = QString::fromUtf8(yytext);

      current->m_groups.append(Grouping(text, Grouping::GROUPING_INGROUP) );
      inGroupParamFound = true;
   }
	YY_BREAK
case 214:
/* rule 214 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);

      if (! inGroupParamFound) {
         warn(yyFileName,yyLineNr, "Missing group name for \\ingroup command");
      }

      unputString(text);

      BEGIN(Comment);
   }
	YY_BREAK
case 215:
/* rule 215 can match eol */
YY_RULE_SETUP
{
      // line continuation
      yyLineNr++;
      addToOutput('\n');
   }
	YY_BREAK
case 216:
YY_RULE_SETUP
{
      // ignore other stuff
      QString text = QString::fromUtf8(yytext);
      addToOutput(text[0]);
   }
	YY_BREAK
/* ----- handle argument of fn command ------- */
case 217:
/* rule 217 can match eol */
YY_RULE_SETUP
{
      // end of fn declaration, pass to langParser as a "prototype"
      QString text = QString::fromUtf8(yytext);

      if (s_braceCount == 0) {
         unputString(text);

         if (langParser != nullptr) {
            // not used for clang parsing
            langParser->parsePrototype(s_functionProto);
         }

         BEGIN( Comment );
      }
   }
	YY_BREAK
case 218:
/* rule 218 can match eol */
YY_RULE_SETUP
{
      // line continuation
      yyLineNr++;
      s_functionProto += ' ';
   }
	YY_BREAK
case 219:
YY_RULE_SETUP
{
      // non-special characters
      s_functionProto += QString::fromUtf8(yytext);
   }
	YY_BREAK
case 220:
YY_RULE_SETUP
{
      s_functionProto += QString::fromUtf8(yytext);
      ++s_braceCount;
   }
	YY_BREAK
case 221:
YY_RULE_SETUP
{
      s_functionProto += QString::fromUtf8(yytext);
      --s_braceCount;
   }
	YY_BREAK
case 222:
YY_RULE_SETUP
{
      // add other stuff
      QString text = QString::fromUtf8(yytext);
      s_functionProto += text[0];
   }
	YY_BREAK
/* ----- handle argument of overload command ------- */
case 223:
/* rule 223 can match eol */
YY_RULE_SETUP
{
      // end of overload declaration, pass to langParser as a "prototype"
      QString text = QString::fromUtf8(yytext);

      if (text[0] == '\n')  {
         yyLineNr++;
      }

      if (s_functionProto.trimmed().isEmpty()) {
         // plain overload command
         addToOutput(theTranslator->trOverloadText());
         addToOutput('\n');

      }  else   {
         // overload declaration
         makeStructuralIndicator(Entry::OVERLOADDOC_SEC);

         if (langParser != nullptr) {
            // not used for clang parsing
            langParser->parsePrototype(s_functionProto);
         }
      }

      BEGIN( Comment );
   }
	YY_BREAK
case 224:
/* rule 224 can match eol */
YY_RULE_SETUP
{
      // line continuation
      yyLineNr++;
      s_functionProto += ' ';
   }
	YY_BREAK
case 225:
YY_RULE_SETUP
{
      // add other stuff
      QString text = QString::fromUtf8(yytext);
      s_functionProto += text[0];
   }
	YY_BREAK
/* ----- handle argument of inherit command ------- */
case 226:
YY_RULE_SETUP
{
      // found argument
      QString text = QString::fromUtf8(yytext);

      current->extends.append(BaseInfo(removeRedundantWhiteSpace(text), Public, Normal));
      BEGIN( Comment );
   }
	YY_BREAK
case 227:
/* rule 227 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);

      warn(yyFileName, yyLineNr, "\\inherit command has no argument");

      if (text[0] == '\n')  {
         yyLineNr++;
      }

      addToOutput('\n');
      BEGIN( Comment );
   }
	YY_BREAK
case 228:
YY_RULE_SETUP
{
      // invalid character for anchor label
      warn(yyFileName, yyLineNr, "Invalid or missing name for \\inherit command");
      BEGIN(Comment);
   }
	YY_BREAK
/* ----- handle argument of extends and implements commands ------- */
case 229:
YY_RULE_SETUP
{
      // found argument
      QString text = QString::fromUtf8(yytext);
      current->extends.append(BaseInfo(removeRedundantWhiteSpace(text),Public,Normal));
      BEGIN( Comment );
   }
	YY_BREAK
case 230:
/* rule 230 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);

      warn(yyFileName,yyLineNr, "Missing argument for \\%s command", csPrintable(s_currentCommand));
      unputString(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 231:
YY_RULE_SETUP
{
      // ignore other stuff
   }
	YY_BREAK
/* ----- handle language specific sections ------- */
case 232:
YY_RULE_SETUP
{
      // language switch
      QString text = QString::fromUtf8(yytext);
      QString langId = text.mid(2);

      if (langId.isEmpty() || Config::getEnum("output-language").compare(langId, Qt::CaseInsensitive) == 0) {
         // enable language specific section
         BEGIN(Comment);
      }
   }
	YY_BREAK
case 233:
YY_RULE_SETUP
{
      /* any character not a *, @, backslash or new line */
   }
	YY_BREAK
case 234:
/* rule 234 can match eol */
YY_RULE_SETUP
{
      // new line in verbatim block
      QString text = QString::fromUtf8(yytext);

      if (text[0] == '\n') {
         ++yyLineNr;
      }
   }
	YY_BREAK
case 235:
YY_RULE_SETUP
{
      // any other character
   }
	YY_BREAK
/* ----- handle arguments of the cite command ------- */
case 236:
YY_RULE_SETUP
{
      // found argument
      QString text = QString::fromUtf8(yytext);

      addCite();
      addToOutput(text);
      BEGIN(Comment);
   }
	YY_BREAK
case 237:
/* rule 237 can match eol */
YY_RULE_SETUP
{
      // missing argument
      QString text = QString::fromUtf8(yytext);

      warn(yyFileName, yyLineNr, "\\cite command has no label");
      unputString(text);

      BEGIN( Comment );
   }
	YY_BREAK
case 238:
YY_RULE_SETUP
{
      // invalid character for cite label
      warn(yyFileName, yyLineNr, "Invalid or missing cite label");
      BEGIN(Comment);
   }
	YY_BREAK
/* ----- handle argument of the copydoc command ------- */
case YY_STATE_EOF(CopyDoc):
{
      setOutput(OutputMainDoc);
      addToOutput(" \\ilinebr\\ilinebr\\copydetails ");
      addToOutput(s_copyDocArg);

      addToOutput("\n");

      BEGIN(Comment);
   }
	YY_BREAK
case 239:
/* rule 239 can match eol */
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);
      if (text[0] == '\n') {
         ++yyLineNr;
      }

      if (s_braceCount == 0) {

         setOutput(OutputMainDoc);
         addToOutput(" \\ilinebr\\ilinebr\\copydetails ");
         addToOutput(s_copyDocArg);

         addToOutput("\n");

         BEGIN(Comment);
      }
   }
	YY_BREAK
case 240:
/* rule 240 can match eol */
YY_RULE_SETUP
{
      // line continuation
      ++yyLineNr;
   }
	YY_BREAK
case 241:
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);

      s_copyDocArg += text;
      addToOutput(text);
   }
	YY_BREAK
case 242:
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);

      s_copyDocArg += text;
      addToOutput(text);

      ++s_braceCount;
   }
	YY_BREAK
case 243:
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);

      s_copyDocArg += text;
      addToOutput(text);

      --s_braceCount;
   }
	YY_BREAK
case 244:
YY_RULE_SETUP
{
      QString text = QString::fromUtf8(yytext);

      s_copyDocArg += text;
      addToOutput(text);
   }
	YY_BREAK
case 245:
YY_RULE_SETUP
ECHO;
	YY_BREAK
			case YY_STATE_EOF(INITIAL):
			case YY_STATE_EOF(Comment):
			case YY_STATE_EOF(PageDocArg1):
			case YY_STATE_EOF(PageDocArg2):
			case YY_STATE_EOF(RelatesParam1):
			case YY_STATE_EOF(ClassDocArg1):
			case YY_STATE_EOF(ClassDocArg2):
			case YY_STATE_EOF(ClassDocArg3):
			case YY_STATE_EOF(CategoryDocArg1):
			case YY_STATE_EOF(ConceptDocArg1):
			case YY_STATE_EOF(XRefItemParam1):
			case YY_STATE_EOF(XRefItemParam2):
			case YY_STATE_EOF(XRefItemParam3):
			case YY_STATE_EOF(FileDocArg1):
			case YY_STATE_EOF(ParamArg1):
			case YY_STATE_EOF(EnumDocArg1):
			case YY_STATE_EOF(NameSpaceDocArg1):
			case YY_STATE_EOF(PackageDocArg1):
			case YY_STATE_EOF(GroupDocArg1):
			case YY_STATE_EOF(GroupDocArg2):
			case YY_STATE_EOF(SectionLabel):
			case YY_STATE_EOF(SectionTitle):
			case YY_STATE_EOF(SubpageLabel):
			case YY_STATE_EOF(SubpageTitle):
			case YY_STATE_EOF(LineParam):
			case YY_STATE_EOF(GuardParam):
			case YY_STATE_EOF(GuardParamEnd):
			case YY_STATE_EOF(SkipGuardedSection):
			case YY_STATE_EOF(SkipInternal):
			case YY_STATE_EOF(NameParam):
			case YY_STATE_EOF(InGroupParam):
			case YY_STATE_EOF(FnParam):
			case YY_STATE_EOF(OverloadParam):
			case YY_STATE_EOF(InheritParam):
			case YY_STATE_EOF(ExtendsParam):
			case YY_STATE_EOF(ReadFormulaShort):
			case YY_STATE_EOF(ReadFormulaRound):
			case YY_STATE_EOF(ReadFormulaLong):
			case YY_STATE_EOF(AnchorLabel):
			case YY_STATE_EOF(HtmlComment):
			case YY_STATE_EOF(HtmlAnchor):
			case YY_STATE_EOF(SkipLang):
			case YY_STATE_EOF(CiteLabel):
			case YY_STATE_EOF(GuardExpr):
			case YY_STATE_EOF(CdataSection):
				yyterminate();

	case YY_END_OF_BUFFER:
		{
		/* Amount of text matched not including the EOB char. */
		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;

		/* Undo the effects of YY_DO_BEFORE_ACTION. */
		*yy_cp = (yy_hold_char);
		YY_RESTORE_YY_MORE_OFFSET

		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
			{
			/* We're scanning a new file or input source.  It's
			 * possible that this happened because the user
			 * just pointed yyin at a new source and called
			 * yylex().  If so, then we have to assure
			 * consistency between YY_CURRENT_BUFFER and our
			 * globals.  Here is the right place to do so, because
			 * this is the first action (other than possibly a
			 * back-up) that will match for the new input source.
			 */
			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
			}

		/* Note that here we test for yy_c_buf_p "<=" to the position
		 * of the first EOB in the buffer, since yy_c_buf_p will
		 * already have been incremented past the NUL character
		 * (since all states make transitions on EOB to the
		 * end-of-buffer state).  Contrast this with the test
		 * in input().
		 */
		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
			{ /* This was really a NUL. */
			yy_state_type yy_next_state;

			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;

			yy_current_state = yy_get_previous_state(  );

			/* Okay, we're now positioned to make the NUL
			 * transition.  We couldn't have
			 * yy_get_previous_state() go ahead and do it
			 * for us because it doesn't know how to deal
			 * with the possibility of jamming (and we don't
			 * want to build jamming into it because then it
			 * will run more slowly).
			 */

			yy_next_state = yy_try_NUL_trans( yy_current_state );

			yy_bp = (yytext_ptr) + YY_MORE_ADJ;

			if ( yy_next_state )
				{
				/* Consume the NUL. */
				yy_cp = ++(yy_c_buf_p);
				yy_current_state = yy_next_state;
				goto yy_match;
				}

			else
				{
				yy_cp = (yy_c_buf_p);
				goto yy_find_action;
				}
			}

		else switch ( yy_get_next_buffer(  ) )
			{
			case EOB_ACT_END_OF_FILE:
				{
				(yy_did_buffer_switch_on_eof) = 0;

				if ( yywrap(  ) )
					{
					/* Note: because we've taken care in
					 * yy_get_next_buffer() to have set up
					 * yytext, we can now set up
					 * yy_c_buf_p so that if some total
					 * hoser (like flex itself) wants to
					 * call the scanner after we return the
					 * YY_NULL, it'll still work - another
					 * YY_NULL will get returned.
					 */
					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;

					yy_act = YY_STATE_EOF(YY_START);
					goto do_action;
					}

				else
					{
					if ( ! (yy_did_buffer_switch_on_eof) )
						YY_NEW_FILE;
					}
				break;
				}

			case EOB_ACT_CONTINUE_SCAN:
				(yy_c_buf_p) =
					(yytext_ptr) + yy_amount_of_matched_text;

				yy_current_state = yy_get_previous_state(  );

				yy_cp = (yy_c_buf_p);
				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
				goto yy_match;

			case EOB_ACT_LAST_MATCH:
				(yy_c_buf_p) =
				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];

				yy_current_state = yy_get_previous_state(  );

				yy_cp = (yy_c_buf_p);
				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
				goto yy_find_action;
			}
		break;
		}

	default:
		YY_FATAL_ERROR(
			"fatal flex scanner internal error--no action found" );
	} /* end of action switch */
		} /* end of scanning one token */
	} /* end of user's declarations */
} /* end of yylex */

/* yy_get_next_buffer - try to read in a new buffer
 *
 * Returns a code representing an action:
 *	EOB_ACT_LAST_MATCH -
 *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
 *	EOB_ACT_END_OF_FILE - end of file
 */
static int yy_get_next_buffer (void)
{
    	char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
	char *source = (yytext_ptr);
	int number_to_move, i;
	int ret_val;

	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
		YY_FATAL_ERROR(
		"fatal flex scanner internal error--end of buffer missed" );

	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
		{ /* Don't try to fill the buffer, so this is an EOF. */
		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
			{
			/* We matched a single character, the EOB, so
			 * treat this as a final EOF.
			 */
			return EOB_ACT_END_OF_FILE;
			}

		else
			{
			/* We matched some text prior to the EOB, first
			 * process it.
			 */
			return EOB_ACT_LAST_MATCH;
			}
		}

	/* Try to read more data. */

	/* First move last chars to start of buffer. */
	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);

	for ( i = 0; i < number_to_move; ++i )
		*(dest++) = *(source++);

	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
		/* don't do the read, it's not guaranteed to return an EOF,
		 * just force an EOF
		 */
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;

	else
		{
			int num_to_read =
			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;

		while ( num_to_read <= 0 )
			{ /* Not enough room in the buffer - grow it. */

			YY_FATAL_ERROR(
"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );

			}

		if ( num_to_read > YY_READ_BUF_SIZE )
			num_to_read = YY_READ_BUF_SIZE;

		/* Read in more data. */
		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
			(yy_n_chars), num_to_read );

		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	if ( (yy_n_chars) == 0 )
		{
		if ( number_to_move == YY_MORE_ADJ )
			{
			ret_val = EOB_ACT_END_OF_FILE;
			yyrestart( yyin  );
			}

		else
			{
			ret_val = EOB_ACT_LAST_MATCH;
			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
				YY_BUFFER_EOF_PENDING;
			}
		}

	else
		ret_val = EOB_ACT_CONTINUE_SCAN;

	if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
		/* Extend the array by 50%, plus the number we really need. */
		int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
			(void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size  );
		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
		/* "- 2" to take care of EOB's */
		YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
	}

	(yy_n_chars) += number_to_move;
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;

	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];

	return ret_val;
}

/* yy_get_previous_state - get the state just before the EOB char was reached */

    static yy_state_type yy_get_previous_state (void)
{
	yy_state_type yy_current_state;
	char *yy_cp;
    
	yy_current_state = (yy_start);
	yy_current_state += YY_AT_BOL();

	(yy_state_ptr) = (yy_state_buf);
	*(yy_state_ptr)++ = yy_current_state;

	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
		{
		YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
			{
			yy_current_state = (int) yy_def[yy_current_state];
			if ( yy_current_state >= 1746 )
				yy_c = yy_meta[yy_c];
			}
		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
		*(yy_state_ptr)++ = yy_current_state;
		}

	return yy_current_state;
}

/* yy_try_NUL_trans - try to make a transition on the NUL character
 *
 * synopsis
 *	next_state = yy_try_NUL_trans( current_state );
 */
    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
{
	int yy_is_jam;
    
	YY_CHAR yy_c = 1;
	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
		{
		yy_current_state = (int) yy_def[yy_current_state];
		if ( yy_current_state >= 1746 )
			yy_c = yy_meta[yy_c];
		}
	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
	yy_is_jam = (yy_current_state == 1745);
	if ( ! yy_is_jam )
		*(yy_state_ptr)++ = yy_current_state;

		return yy_is_jam ? 0 : yy_current_state;
}

#ifndef YY_NO_UNPUT

    static void yyunput (int c, char * yy_bp )
{
	char *yy_cp;
    
    yy_cp = (yy_c_buf_p);

	/* undo effects of setting up yytext */
	*yy_cp = (yy_hold_char);

	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
		{ /* need to shift things up to make room */
		/* +2 for EOB chars. */
		int number_to_move = (yy_n_chars) + 2;
		char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
		char *source =
				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];

		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
			*--dest = *--source;

		yy_cp += (int) (dest - source);
		yy_bp += (int) (dest - source);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
			(yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size;

		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
			YY_FATAL_ERROR( "flex scanner push-back overflow" );
		}

	*--yy_cp = (char) c;

	(yytext_ptr) = yy_bp;
	(yy_hold_char) = *yy_cp;
	(yy_c_buf_p) = yy_cp;
}

#endif

#ifndef YY_NO_INPUT
#ifdef __cplusplus
    static int yyinput (void)
#else
    static int input  (void)
#endif

{
	int c;
    
	*(yy_c_buf_p) = (yy_hold_char);

	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
		{
		/* yy_c_buf_p now points to the character we want to return.
		 * If this occurs *before* the EOB characters, then it's a
		 * valid NUL; if not, then we've hit the end of the buffer.
		 */
		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
			/* This was really a NUL. */
			*(yy_c_buf_p) = '\0';

		else
			{ /* need more input */
			int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
			++(yy_c_buf_p);

			switch ( yy_get_next_buffer(  ) )
				{
				case EOB_ACT_LAST_MATCH:
					/* This happens because yy_g_n_b()
					 * sees that we've accumulated a
					 * token and flags that we need to
					 * try matching the token before
					 * proceeding.  But for input(),
					 * there's no matching to consider.
					 * So convert the EOB_ACT_LAST_MATCH
					 * to EOB_ACT_END_OF_FILE.
					 */

					/* Reset buffer status. */
					yyrestart( yyin );

					/*FALLTHROUGH*/

				case EOB_ACT_END_OF_FILE:
					{
					if ( yywrap(  ) )
						return 0;

					if ( ! (yy_did_buffer_switch_on_eof) )
						YY_NEW_FILE;
#ifdef __cplusplus
					return yyinput();
#else
					return input();
#endif
					}

				case EOB_ACT_CONTINUE_SCAN:
					(yy_c_buf_p) = (yytext_ptr) + offset;
					break;
				}
			}
		}

	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
	*(yy_c_buf_p) = '\0';	/* preserve yytext */
	(yy_hold_char) = *++(yy_c_buf_p);

	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');

	return c;
}
#endif	/* ifndef YY_NO_INPUT */

/** Immediately switch to a different input stream.
 * @param input_file A readable stream.
 * 
 * @note This function does not reset the start condition to @c INITIAL .
 */
    void yyrestart  (FILE * input_file )
{
    
	if ( ! YY_CURRENT_BUFFER ){
        yyensure_buffer_stack ();
		YY_CURRENT_BUFFER_LVALUE =
            yy_create_buffer( yyin, YY_BUF_SIZE );
	}

	yy_init_buffer( YY_CURRENT_BUFFER, input_file );
	yy_load_buffer_state(  );
}

/** Switch to a different input buffer.
 * @param new_buffer The new input buffer.
 * 
 */
    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
{
    
	/* TODO. We should be able to replace this entire function body
	 * with
	 *		yypop_buffer_state();
	 *		yypush_buffer_state(new_buffer);
     */
	yyensure_buffer_stack ();
	if ( YY_CURRENT_BUFFER == new_buffer )
		return;

	if ( YY_CURRENT_BUFFER )
		{
		/* Flush out information for old buffer. */
		*(yy_c_buf_p) = (yy_hold_char);
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	YY_CURRENT_BUFFER_LVALUE = new_buffer;
	yy_load_buffer_state(  );

	/* We don't actually know whether we did this switch during
	 * EOF (yywrap()) processing, but the only time this flag
	 * is looked at is after yywrap() is called, so it's safe
	 * to go ahead and always set it.
	 */
	(yy_did_buffer_switch_on_eof) = 1;
}

static void yy_load_buffer_state  (void)
{
    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
	(yy_hold_char) = *(yy_c_buf_p);
}

/** Allocate and initialize an input buffer state.
 * @param file A readable stream.
 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
 * 
 * @return the allocated buffer state.
 */
    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
{
	YY_BUFFER_STATE b;
    
	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

	b->yy_buf_size = size;

	/* yy_ch_buf has to be 2 characters longer than the size given because
	 * we need to put in 2 end-of-buffer characters.
	 */
	b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2)  );
	if ( ! b->yy_ch_buf )
		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

	b->yy_is_our_buffer = 1;

	yy_init_buffer( b, file );

	return b;
}

/** Destroy the buffer.
 * @param b a buffer created with yy_create_buffer()
 * 
 */
    void yy_delete_buffer (YY_BUFFER_STATE  b )
{
    
	if ( ! b )
		return;

	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;

	if ( b->yy_is_our_buffer )
		yyfree( (void *) b->yy_ch_buf  );

	yyfree( (void *) b  );
}

/* Initializes or reinitializes a buffer.
 * This function is sometimes called more than once on the same buffer,
 * such as during a yyrestart() or at EOF.
 */
    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )

{
	int oerrno = errno;
    
	yy_flush_buffer( b );

	b->yy_input_file = file;
	b->yy_fill_buffer = 1;

    /* If b is the current buffer, then yy_init_buffer was _probably_
     * called from yyrestart() or through yy_get_next_buffer.
     * In that case, we don't want to reset the lineno or column.
     */
    if (b != YY_CURRENT_BUFFER){
        b->yy_bs_lineno = 1;
        b->yy_bs_column = 0;
    }

        b->yy_is_interactive = 0;
    
	errno = oerrno;
}

/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
 * 
 */
    void yy_flush_buffer (YY_BUFFER_STATE  b )
{
    	if ( ! b )
		return;

	b->yy_n_chars = 0;

	/* We always need two end-of-buffer characters.  The first causes
	 * a transition to the end-of-buffer state.  The second causes
	 * a jam in that state.
	 */
	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;

	b->yy_buf_pos = &b->yy_ch_buf[0];

	b->yy_at_bol = 1;
	b->yy_buffer_status = YY_BUFFER_NEW;

	if ( b == YY_CURRENT_BUFFER )
		yy_load_buffer_state(  );
}

/** Pushes the new state onto the stack. The new state becomes
 *  the current state. This function will allocate the stack
 *  if necessary.
 *  @param new_buffer The new state.
 *  
 */
void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
{
    	if (new_buffer == nullptr)
		return;

	yyensure_buffer_stack();

	/* This block is copied from yy_switch_to_buffer. */
	if ( YY_CURRENT_BUFFER )
		{
		/* Flush out information for old buffer. */
		*(yy_c_buf_p) = (yy_hold_char);
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	/* Only push if top exists. Otherwise, replace top. */
	if (YY_CURRENT_BUFFER)
		(yy_buffer_stack_top)++;
	YY_CURRENT_BUFFER_LVALUE = new_buffer;

	/* copied from yy_switch_to_buffer. */
	yy_load_buffer_state(  );
	(yy_did_buffer_switch_on_eof) = 1;
}

/** Removes and deletes the top of the stack, if present.
 *  The next element becomes the new top.
 *  
 */
void yypop_buffer_state (void)
{
    	if (!YY_CURRENT_BUFFER)
		return;

	yy_delete_buffer(YY_CURRENT_BUFFER );
	YY_CURRENT_BUFFER_LVALUE = nullptr;
	if ((yy_buffer_stack_top) > 0)
		--(yy_buffer_stack_top);

	if (YY_CURRENT_BUFFER) {
		yy_load_buffer_state(  );
		(yy_did_buffer_switch_on_eof) = 1;
	}
}

/* Allocates the stack if it does not exist.
 *  Guarantees space for at least one push.
 */
static void yyensure_buffer_stack (void)
{
	yy_size_t num_to_alloc;
    
	if (!(yy_buffer_stack)) {

		/* First allocation is just for 2 elements, since we don't know if this
		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
		 * immediate realloc on the next call.
         */
      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
		(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
								(num_to_alloc * sizeof(struct yy_buffer_state*)
								);
		if ( ! (yy_buffer_stack) )
			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );

		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));

		(yy_buffer_stack_max) = num_to_alloc;
		(yy_buffer_stack_top) = 0;
		return;
	}

	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){

		/* Increase the buffer to prepare for a possible push. */
		yy_size_t grow_size = 8 /* arbitrary grow size */;

		num_to_alloc = (yy_buffer_stack_max) + grow_size;
		(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
								((yy_buffer_stack),
								num_to_alloc * sizeof(struct yy_buffer_state*)
								);
		if ( ! (yy_buffer_stack) )
			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );

		/* zero only the new slots.*/
		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
		(yy_buffer_stack_max) = num_to_alloc;
	}
}

/** Setup the input buffer state to scan directly from a user-specified character buffer.
 * @param base the character buffer
 * @param size the size in bytes of the character buffer
 * 
 * @return the newly allocated buffer state object.
 */
YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
{
	YY_BUFFER_STATE b;
    
	if ( size < 2 ||
	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
	     base[size-1] != YY_END_OF_BUFFER_CHAR )
		/* They forgot to leave room for the EOB's. */
		return nullptr;

	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );

	b->yy_buf_size = (int) (size - 2);	/* "- 2" to take care of EOB's */
	b->yy_buf_pos = b->yy_ch_buf = base;
	b->yy_is_our_buffer = 0;
	b->yy_input_file = nullptr;
	b->yy_n_chars = b->yy_buf_size;
	b->yy_is_interactive = 0;
	b->yy_at_bol = 1;
	b->yy_fill_buffer = 0;
	b->yy_buffer_status = YY_BUFFER_NEW;

	yy_switch_to_buffer( b  );

	return b;
}

/** Setup the input buffer state to scan a string. The next call to yylex() will
 * scan from a @e copy of @a str.
 * @param yystr a NUL-terminated string to scan
 * 
 * @return the newly allocated buffer state object.
 * @note If you want to scan bytes that may contain NUL values, then use
 *       yy_scan_bytes() instead.
 */
YY_BUFFER_STATE yy_scan_string (const char * yystr )
{
    
	return yy_scan_bytes( yystr, (int) strlen(yystr) );
}

/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
 * scan from a @e copy of @a bytes.
 * @param yybytes the byte buffer to scan
 * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
 * 
 * @return the newly allocated buffer state object.
 */
YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
{
	YY_BUFFER_STATE b;
	char *buf;
	yy_size_t n;
	int i;
    
	/* Get memory for full buffer, including space for trailing EOB's. */
	n = (yy_size_t) (_yybytes_len + 2);
	buf = (char *) yyalloc( n  );
	if ( ! buf )
		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );

	for ( i = 0; i < _yybytes_len; ++i )
		buf[i] = yybytes[i];

	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;

	b = yy_scan_buffer( buf, n );
	if ( ! b )
		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );

	/* It's okay to grow etc. this buffer, and we should throw it
	 * away when we're done.
	 */
	b->yy_is_our_buffer = 1;

	return b;
}

#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif

static void yynoreturn yy_fatal_error (const char* msg )
{
			fprintf( stderr, "%s\n", msg );
	exit( YY_EXIT_FAILURE );
}

/* Redefine yyless() so it works in section 3 code. */

#undef yyless
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up yytext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		yytext[yyleng] = (yy_hold_char); \
		(yy_c_buf_p) = yytext + yyless_macro_arg; \
		(yy_hold_char) = *(yy_c_buf_p); \
		*(yy_c_buf_p) = '\0'; \
		yyleng = yyless_macro_arg; \
		} \
	while ( 0 )

/* Accessor  methods (get/set functions) to struct members. */

/** Get the current line number.
 * 
 */
int yyget_lineno  (void)
{
    
    return yylineno;
}

/** Get the input stream.
 * 
 */
FILE *yyget_in  (void)
{
        return yyin;
}

/** Get the output stream.
 * 
 */
FILE *yyget_out  (void)
{
        return yyout;
}

/** Get the length of the current token.
 * 
 */
int yyget_leng  (void)
{
        return yyleng;
}

/** Get the current token.
 * 
 */

char *yyget_text  (void)
{
        return yytext;
}

/** Set the current line number.
 * @param _line_number line number
 * 
 */
void yyset_lineno (int  _line_number )
{
    
    yylineno = _line_number;
}

/** Set the input stream. This does not discard the current
 * input buffer.
 * @param _in_str A readable stream.
 * 
 * @see yy_switch_to_buffer
 */
void yyset_in (FILE *  _in_str )
{
        yyin = _in_str ;
}

void yyset_out (FILE *  _out_str )
{
        yyout = _out_str ;
}

int yyget_debug  (void)
{
        return yy_flex_debug;
}

void yyset_debug (int  _bdebug )
{
        yy_flex_debug = _bdebug ;
}

static int yy_init_globals (void)
{
        /* Initialization is the same as for the non-reentrant scanner.
     * This function is called from yylex_destroy(), so don't allocate here.
     */

    (yy_buffer_stack) = nullptr;
    (yy_buffer_stack_top) = 0;
    (yy_buffer_stack_max) = 0;
    (yy_c_buf_p) = nullptr;
    (yy_init) = 0;
    (yy_start) = 0;

    (yy_state_buf) = 0;
    (yy_state_ptr) = 0;
    (yy_full_match) = 0;
    (yy_lp) = 0;

/* Defined in main.c */
#ifdef YY_STDINIT
    yyin = stdin;
    yyout = stdout;
#else
    yyin = nullptr;
    yyout = nullptr;
#endif

    /* For future reference: Set errno on error, since we are called by
     * yylex_init()
     */
    return 0;
}

/* yylex_destroy is for both reentrant and non-reentrant scanners. */
int yylex_destroy  (void)
{
    
    /* Pop the buffer stack, destroying each element. */
	while(YY_CURRENT_BUFFER){
		yy_delete_buffer( YY_CURRENT_BUFFER  );
		YY_CURRENT_BUFFER_LVALUE = nullptr;
		yypop_buffer_state();
	}

	/* Destroy the stack itself. */
	yyfree((yy_buffer_stack) );
	(yy_buffer_stack) = nullptr;

    yyfree ( (yy_state_buf) );
    (yy_state_buf)  = nullptr;

    /* Reset the globals. This is important in a non-reentrant scanner so the next time
     * yylex() is called, initialization will occur. */
    yy_init_globals( );

    return 0;
}

/*
 * Internal utility routines.
 */

#ifndef yytext_ptr
static void yy_flex_strncpy (char* s1, const char * s2, int n )
{
		
	int i;
	for ( i = 0; i < n; ++i )
		s1[i] = s2[i];
}
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (const char * s )
{
	int n;
	for ( n = 0; s[n]; ++n )
		;

	return n;
}
#endif

void *yyalloc (yy_size_t  size )
{
			return malloc(size);
}

void *yyrealloc  (void * ptr, yy_size_t  size )
{
		
	/* The cast to (char *) in the following accommodates both
	 * implementations that use char* generic pointers, and those
	 * that use void* generic pointers.  It works with the latter
	 * because both ANSI C and C++ allow castless assignment from
	 * any pointer type to void*, and deal with argument conversions
	 * as though doing an assignment.
	 */
	return realloc(ptr, size);
}

void yyfree (void * ptr )
{
			free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
}

#define YYTABLES_NAME "yytables"

static bool handleBrief(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   setOutput(OutputBrief);
   return false;
}

static bool handleProperty(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   bool stop = makeStructuralIndicator(Entry::MEMBERDOC_SEC);
   s_functionProto.clear();
   s_braceCount = 0;
   BEGIN(FnParam);

   current->mtype = MethodType::Property;

   return stop;
}

static bool handleFn(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   bool stop = makeStructuralIndicator(Entry::MEMBERDOC_SEC);
   s_functionProto.clear();
   s_braceCount = 0;
   BEGIN(FnParam);

   return stop;
}

static bool handleDef(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   bool stop = makeStructuralIndicator(Entry::DEFINEDOC_SEC);
   s_functionProto.clear();
   BEGIN(FnParam);

   return stop;
}

static bool handleOverload(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   s_functionProto.clear();
   BEGIN(OverloadParam);

   return false;
}

static bool handleEnum(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   bool stop = makeStructuralIndicator(Entry::ENUMDOC_SEC);
   BEGIN(EnumDocArg1);

   return stop;
}

static bool handleDefGroup(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   bool stop = makeStructuralIndicator(Entry::GROUPDOC_SEC);
   current->groupDocType = Entry::GROUPDOC_NORMAL;
   BEGIN( GroupDocArg1 );

   return stop;
}

static bool handleAddToGroup(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   bool stop = makeStructuralIndicator(Entry::GROUPDOC_SEC);
   current->groupDocType = Entry::GROUPDOC_ADD;
   BEGIN( GroupDocArg1 );

   return stop;
}

static bool handleWeakGroup(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   bool stop = makeStructuralIndicator(Entry::GROUPDOC_SEC);
   current->groupDocType = Entry::GROUPDOC_WEAK;
   BEGIN( GroupDocArg1 );

   return stop;
}

static bool handleNamespace(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   bool stop = makeStructuralIndicator(Entry::NAMESPACEDOC_SEC);
   BEGIN( NameSpaceDocArg1 );

   return stop;
}

static bool handlePackage(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   bool stop = makeStructuralIndicator(Entry::PACKAGEDOC_SEC);
   BEGIN( PackageDocArg1 );

   return stop;
}

static bool handleClass(const QString &str, const QStringList &list)
{
   (void) list;

   bool stop = makeStructuralIndicator(Entry::CLASSDOC_SEC);
   s_currentCommand = str;
   BEGIN( ClassDocArg1 );

   return stop;
}

static bool handleConcept(const QString &str, const QStringList &list)
{
   (void) list;

   bool stop = makeStructuralIndicator(Entry::CONCEPTDOC_SEC);
   s_currentCommand = str;
   BEGIN( ConceptDocArg1 );

   return stop;
}

static bool handleHeaderFile(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   BEGIN( ClassDocArg2 );
   return false;
}

static bool handleProtocol(const QString &str, const QStringList &list)
{
   (void) list;

   // Obj-C protocol
   bool stop = makeStructuralIndicator(Entry::PROTOCOLDOC_SEC);
   s_currentCommand = str;
   BEGIN( ClassDocArg1 );

   return stop;
}

static bool handleCategory(const QString &str, const QStringList &list)
{
   (void) list;

   // Obj-C category
   bool stop = makeStructuralIndicator(Entry::CATEGORYDOC_SEC);
   s_currentCommand = str;
   BEGIN( CategoryDocArg1 );

   return stop;
}

static bool handleUnion(const QString &str, const QStringList &list)
{
   (void) list;

   bool stop = makeStructuralIndicator(Entry::UNIONDOC_SEC);
   s_currentCommand = str;
   BEGIN( ClassDocArg1 );

   return stop;
}

static bool handleStruct(const QString &str, const QStringList &list)
{
   (void) list;

   bool stop=makeStructuralIndicator(Entry::STRUCTDOC_SEC);
   s_currentCommand = str;
   BEGIN( ClassDocArg1 );

   return stop;
}

static bool handleInterface(const QString &str, const QStringList &list)
{
   (void) list;

   bool stop = makeStructuralIndicator(Entry::INTERFACEDOC_SEC);
   s_currentCommand = str;
   BEGIN( ClassDocArg1 );

   return stop;
}

static bool handleIdlException(const QString &str, const QStringList &list)
{
   (void) list;

   bool stop = makeStructuralIndicator(Entry::EXCEPTIONDOC_SEC);
   s_currentCommand = str;
   BEGIN( ClassDocArg1 );

   return stop;
}

static bool handlePage(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   bool stop = makeStructuralIndicator(Entry::PAGEDOC_SEC);
   BEGIN( PageDocArg1 );

   return stop;
}

static bool handleMainpage(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   bool stop = makeStructuralIndicator(Entry::MAINPAGEDOC_SEC);

   if (stop) {
      current->m_entryName = QString();
   } else {
      current->m_entryName = "mainpage";
   }

   setOutput(OutputMainDoc);
   BEGIN( PageDocArg2 );

   return stop;
}

static bool handleFile(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   bool stop = makeStructuralIndicator(Entry::FILEDOC_SEC);

   if (! stop) {
      current->m_entryName = yyFileName;
   }

   BEGIN( FileDocArg1 );

   return stop;
}

static bool handleParam(const QString &str, const QStringList &list)
{
  // process param and retval arguments to escape leading underscores
  // in case of markdown processing

   (void) str;
   (void) list;

   addToOutput("@param ");
   BEGIN( ParamArg1 );

   return false;
}

static bool handleRetval(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   addToOutput("@retval ");
   BEGIN( ParamArg1 );

   return false;
}

static bool handleDir(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   bool stop = makeStructuralIndicator(Entry::DIRDOC_SEC);

   if (! stop) {
      current->m_entryName = yyFileName;
   }

   BEGIN( FileDocArg1 );

   return stop;
}

static bool handleExample(const QString &str, const QStringList &list)
{
   (void) str;

   Entry::Sections section = Entry::EXAMPLE_SEC;

   for (auto item : list) {
      QString opt = item.trimmed().toLower();

      if (opt == "lineno") {
         section = Entry::EXAMPLE_LINENO_SEC;

      } else {
         warn(yyFileName, yyLineNr, "Unsupported option '%s' for command '\\%s'", csPrintable(opt), csPrintable(str));
      }
   }

   bool stop = makeStructuralIndicator(section);

   if (! stop) {
      current->m_entryName = yyFileName;
   }

   BEGIN( FileDocArg1 );

   return stop;
}

static bool handleDetails(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   if (inContext != OutputBrief) {
      // treat @details outside brief description as a new paragraph
      addToOutput("\\internal_linebr\\internal_linebr");
   }

   setOutput(OutputMainDoc);

   return false;
}

static bool handleName(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   bool stop = makeStructuralIndicator(Entry::MEMBERGRP_SEC);

   if (! stop) {
      s_memberGroupHeader.resize(0);
      BEGIN( NameParam );

      if (s_memberGroupId != DOX_NOGROUP) {
         // end of previous member group
         closeGroup(current, yyFileName, yyLineNr, true, true);
       }
   }

   return stop;
}

static bool handleTodo(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   newXRefKind = XRef_Todo;
   setOutput(OutputXRef);
   xrefKind = XRef_Todo;

   return false;
}

static bool handleTest(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   newXRefKind = XRef_Test;
   setOutput(OutputXRef);
   xrefKind = XRef_Test;

   return false;
}

static bool handleBug(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   newXRefKind = XRef_Bug;
   setOutput(OutputXRef);
   xrefKind = XRef_Bug;

   return false;
}

static bool handleDeprecated(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   newXRefKind = XRef_Deprecated;
   setOutput(OutputXRef);
   xrefKind = XRef_Deprecated;

   return false;
}

static bool handleXRefItem(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   newXRefKind = XRef_Item;
   BEGIN(XRefItemParam1);

   return false;
}

static bool handleParBlock(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   if (s_insideParBlock)   {
      warn(yyFileName,yyLineNr, "Found \\parblock command while already in a parblock");
   }

   if (! s_spaceBeforeCmd.isEmpty()) {
      addToOutput(s_spaceBeforeCmd);
      s_spaceBeforeCmd.resize(0);
   }

   addToOutput("@parblock ");
   s_insideParBlock = true;

   return false;
}

static bool handleEndParBlock(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   if (! s_insideParBlock) {
      warn(yyFileName,yyLineNr, "Found \\endparblock command without matching \\parblock");
   }

   addToOutput("@endparblock");
   setOutput(OutputMainDoc);    // to end a parblock inside a xrefitem like context
   s_insideParBlock = false;

   return false;
}

static bool handleRelated(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   if (! current->getData(EntryKey::Related_Class).isEmpty()) {
      warn(yyFileName,yyLineNr,
                  "Found multiple \\relates, \\relatesalso or \\memberof commands in a comment block, using last definition");
   }

   current->relatesType = Simple;
   BEGIN(RelatesParam1);

   return false;
}

static bool handleRelatedAlso(const QString &str, const QStringList &list)
{

   (void) list;

   if (! current->getData(EntryKey::Related_Class).isEmpty()) {
      warn(yyFileName, yyLineNr,
                  "Found multiple \\relates, \\relatesalso or \\memberof commands in a comment block, using last definition");
   }

   current->relatesType = Duplicate;
   s_currentCommand = str;
   BEGIN(RelatesParam1);

   return false;
}

static bool handleMemberOf(const QString &str, const QStringList &list)
{
   (void) list;

   if (! current->getData(EntryKey::Related_Class).isEmpty()) {
      warn(yyFileName, yyLineNr,
                  "Found multiple \\relates, \\relatesalso or \\memberof commands in a comment block, using last definition");
   }

   current->relatesType = MemberOf;
   s_currentCommand = str;
   BEGIN(RelatesParam1);

   return false;
}

static bool handleRefItem(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   addToOutput("@refitem ");
   BEGIN(LineParam);

   return false;
}

static bool handleSection(const QString &str, const QStringList &list)
{
   (void) list;

   setOutput(OutputMainDoc);
   addToOutput("@" + str + " ");

   BEGIN(SectionLabel);

   if (str == "section") {
      s_sectionLevel = 1;

   } else if (str == "subsection") {
      s_sectionLevel = 2;

   } else if (str == "subsubsection") {
      s_sectionLevel = 3;

   } else if (str == "paragraph") {
      s_sectionLevel = 4;

   }

   return false;
}

static bool handleSubpage(const QString &str, const QStringList &list)
{
   (void) list;

   if (current->section != Entry::EMPTY_SEC && current->section != Entry::PAGEDOC_SEC &&
         current->section != Entry::MAINPAGEDOC_SEC) {

      warn(yyFileName, yyLineNr, "Found \\subpage command in a comment block that is not marked as a page");
  }

  if (! s_spaceBeforeCmd.isEmpty()) {
     addToOutput(s_spaceBeforeCmd);
      s_spaceBeforeCmd.clear();
  }

   addToOutput("@" + str + " ");
   BEGIN(SubpageLabel);

   return false;
}

static bool handleAnchor(const QString &str, const QStringList &list)
{
   (void) list;

   addToOutput("@" + str + " ");
   BEGIN(AnchorLabel);

   return false;
}

static bool handleCite(const QString &str, const QStringList &list)
{
   (void) list;

   if (! s_spaceBeforeCmd.isEmpty()) {
     addToOutput(s_spaceBeforeCmd);
     s_spaceBeforeCmd.resize(0);
   }

   addToOutput("@" + str + " ");
   BEGIN(CiteLabel);

   return false;
}

static bool handleFormatBlock(const QString &str, const QStringList &list)
{
   if (! s_spaceBeforeCmd.isEmpty()) {
      addToOutput(s_spaceBeforeCmd);
      s_spaceBeforeCmd.clear();
   }
   if (list.isEmpty()) {
      addToOutput("@" + str + " ");

   } else {
      addToOutput("@" + str + "{" + list.join(",") + "} ");
   }

   s_blockName    = str;
   s_commentCount = 0;
   BEGIN(FormatBlock);

   return false;
}

static bool handleAddIndex(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   addToOutput("@addindex ");

   BEGIN(LineParam);

   return false;
}

static bool handleIf(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   s_isEnabledSection = false;
   s_guardType        = Guard_If;
   s_spaceBeforeIf    = s_spaceBeforeCmd;
   BEGIN(GuardParam);

   return false;
}

static bool handleIfNot(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   s_isEnabledSection = false;
   s_guardType        = Guard_IfNot;
   s_spaceBeforeIf    = s_spaceBeforeCmd;

   BEGIN(GuardParam);

   return false;
}

static bool handleElseIf(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   if (s_guards.isEmpty()) {
      warn(yyFileName,yyLineNr, "Found \\else without matching start command");

   } else {
      s_guardType     = s_isEnabledSection ? Guard_Skip : Guard_If;
      s_spaceBeforeIf = s_spaceBeforeCmd;
      BEGIN(GuardParam);
   }

   return false;
}

static bool handleElse(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   if (s_guards.isEmpty()) {
      warn(yyFileName,yyLineNr, "Found \\else without matching start command");

   } else {
      s_spaceBeforeIf = s_spaceBeforeCmd;
      BEGIN( SkipGuardedSection );
   }

   return false;
}

static bool handleEndIf(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   if (s_guards.isEmpty())   {
      warn(yyFileName,yyLineNr, "Found \\endif without matching start command");

   } else {
      s_guards.pop();
   }

   s_isEnabledSection = false;
   if (! s_spaceBeforeCmd.isEmpty()) {
      addToOutput(s_spaceBeforeCmd);
      s_spaceBeforeCmd.resize(0);
   }

   BEGIN( GuardParamEnd );

   return false;
}

static bool handleIngroup(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   inGroupParamFound = false;
   BEGIN( InGroupParam );

   return false;
}

static bool handleNoSubGrouping(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->subGrouping = false;

   return false;
}

static bool handleShowInitializer(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->initLines = 100000;  // ON
   return false;
}

static bool handleHideInitializer(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->initLines = 0;

   return false;
}

static bool handleCallgraph(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->callGraph = true;

   return false;
}

static bool handleHideCallgraph(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->callGraph = false;
   return false;
}

static bool handleCallergraph(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->callerGraph = true;
   return false;
}

static bool handleHideCallergraph(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->callerGraph = false;

   return false;
}

static bool handleReferencedByRelation(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->referencedByRelation = true;

   return false;
}

static bool handleHideReferencedByRelation(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->referencedByRelation = false;

   return false;
}

static bool handleReferencesRelation(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->referencesRelation = true;

   return false;
}

static bool handleHideReferencesRelation(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->referencesRelation = false;

   return false;
}

static bool handleInternal(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   if (s_internalDocs) {
      addToOutput(" \\internal ");
      s_processInternalDocs = true;

   } else {
      // make sure some whitespace before an \internal command
      // is not treated as "documentation"

      if (current->getData(EntryKey::Main_Docs).trimmed().isEmpty()) {
         current->setData(EntryKey::Main_Docs, QString());
      }

      s_condCount = 0;
      BEGIN( SkipInternal );
  }

  return false;
}

static bool handleStatic(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   endBrief();
   current->m_static = true;

   return false;
}

static bool handlePure(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   endBrief();
   current->virt = Specifier::Pure;

   return false;
}

static bool handlePrivate(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->protection = Protection::Private;

   return false;
}

static bool handlePrivateSection(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->protection = (s_protection = Protection::Private);

   return false;
}

static bool handleProtected(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->protection = Protection::Protected;

   return false;
}

static bool handleProtectedSection(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->protection = (s_protection = Protection::Protected);

   return false;
}

static bool handlePublic(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->protection = Protection::Public;

   return false;
}

static bool handlePublicSection(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   current->protection = (s_protection = Protection::Public);
   return false;
}

static bool handleToc(const QString &str, const QStringList &list)
{
   (void) str;

   if (current->section == Entry::PAGEDOC_SEC || current->section == Entry::MAINPAGEDOC_SEC) {

      for (auto &item : list) {
         QString option = item.trimmed().toLower();

         int level = 5;
         int i     = option.find(':');

         if (i > 0) {
            // found something like "html:4"
            bool ok = false;
            level = option.mid(i + 1).toInteger<int>(&ok);

            if (ok) {
               level  = (level >  5 ? 5 : level);
               level  = (level <= 0 ? 5 : level);
               option = option.left(i).trimmed();

            } else {
               warn(yyFileName, yyLineNr, "Unknown option level specified with \\tableofcontents: `%s'", csPrintable(option));
               option = "";
            }
         }

         if (! option.isEmpty()) {
            if (option == "html") {
               current->localToc.enableHtml(level);

            } else if (option == "latex") {
               current->localToc.enableLatex(level);

            } else if (option == "xml") {
               current->localToc.enableXml(level);

            } else if (option == "docbook") {
               current->localToc.enableDocbook(level);

            } else {
               warn(yyFileName, yyLineNr, "Unknown option specified with \\tableofcontents: `%s'", csPrintable(option));
            }
         }
      }

      if (current->localToc.nothingEnabled()) {
         // for backward compatibility
         current->localToc.enableHtml(5);
         current->localToc.enableXml(5);
      }
   }

   return false;
}

static bool handleInherit(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   BEGIN(InheritParam);

   return false;
}

static bool handleExtends(const QString &str, const QStringList &list)
{
   (void) list;
   s_currentCommand = str;
   BEGIN(ExtendsParam);

   return false;
}

static bool handleCopyBrief(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   if (current->getData(EntryKey::Brief_Docs).isEmpty() && current->getData(EntryKey::Main_Docs).isEmpty()) {

      // if we do not have a brief or detailed description yet,
      // then the @copybrief should end up in the brief description,
      // otherwise it will be copied inline

      setOutput(OutputBrief);
   }

   if (! s_spaceBeforeCmd.isEmpty()) {
      addToOutput(s_spaceBeforeCmd);
      s_spaceBeforeCmd.resize(0);
   }

   addToOutput("\\copybrief ");
   return false;
}

static bool handleCopyDetails(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   setOutput(OutputMainDoc);

   if (! s_spaceBeforeCmd.isEmpty()) {
     addToOutput(s_spaceBeforeCmd);
     s_spaceBeforeCmd.resize(0);
   }

   addToOutput("\\copydetails ");
   return false;
}

static bool handleCopyDoc(const QString &str, const QStringList &list)
{
   (void) str;
   (void) list;

   setOutput(OutputBrief);
   if (! s_spaceBeforeCmd.isEmpty()) {
     addToOutput(s_spaceBeforeCmd);
     s_spaceBeforeCmd.resize(0);
   }

   addToOutput("\\copybrief ");
   s_copyDocArg.resize(0);
   BEGIN(CopyDoc);

   return false;
}

static void checkFormula()
{
   if (YY_START == ReadFormulaShort || YY_START == ReadFormulaRound  || YY_START == ReadFormulaLong) {
      warn(yyFileName, yyLineNr, "End of comment block while inside formula.");
   }
}

// main entry point
bool parseCommentBlock(ParserInterface *parser, QSharedPointer<Entry> curEntry, const QString &comment,
                  const QString &fileName, int &lineNr, bool isBrief, bool isAutoBrief, bool isInbody,
                  Protection &r_protection, int &r_position, bool &r_newEntryNeeded )
{
   initParser();
   s_guards.clear();

   if (comment.isEmpty()) {
      // avoid empty strings
      return false;
   }

   if (Doxy_Globals::markdownSupport) {

      s_inputString = processMarkdown(fileName, lineNr, QSharedPointer<Entry>(), comment);

      QStringView tmp(s_inputString);

      while (tmp.startsWith(" ")) {
         tmp = tmp.mid(1);
      }

      while (tmp.startsWith("\n")) {
         tmp = tmp.mid(1);
      }

      if (tmp.startsWith("<br>")) {
         tmp = tmp.mid(4);
      }

      s_inputString = QString(tmp);

   } else {
      s_inputString  = comment;
   }

   s_inputString.append(" ");

   yyFileName       = fileName;
   yyLineNr         = lineNr;
   langParser       = parser;
   current          = curEntry;
   current->docLine = (lineNr > 1 ? lineNr : 1);

   briefEndsAtDot   = isAutoBrief;
   inBody           = isInbody;
   s_protection     = r_protection;
   s_inputPosition  = r_position;
   s_outputXRef     = QString();
   xrefKind         = XRef_None;

   xrefAppendFlag   = false;
   insidePre        = false;
   s_needNewEntry   = false;
   s_parseMore      = false;

   if (! isBrief && ! isAutoBrief && ! current->getData(EntryKey::Main_Docs).isEmpty()) {
      // add newline separator between detailed comment blocks
      current->appendData(EntryKey::Main_Docs, "\n");
   }

   if (isBrief || isAutoBrief) {
      setOutput(OutputBrief);

   } else {
      setOutput(OutputMainDoc);
   }

   s_condCount    = 0;
   s_sectionLevel = 0;

   s_spaceBeforeCmd.clear();
   s_spaceBeforeIf.clear();

   if (! current->getData(EntryKey::Main_Docs).isEmpty()) {
      // separate detailed doc fragments
      current->appendData(EntryKey::Main_Docs, "\n\n");
   }

   if (! current->getData(EntryKey::Inbody_Docs).isEmpty() && isInbody) {
      // separate in body fragments
      current->appendData(EntryKey::Inbody_Docs, "\n\n");
   }

   yyrestart(yyin);
   BEGIN(Comment);
   yylex();

   setOutput(OutputMainDoc);

   if (YY_START == OverloadParam) {
      // comment ended with \overload
      addToOutput(theTranslator->trOverloadText());
   }

   if (! s_guards.isEmpty()) {
      warn(yyFileName, yyLineNr, "Documentation block ended in the middle of a conditional section");
   }

   if (s_insideParBlock) {
      warn(yyFileName, yyLineNr, "Documentation block ended while inside a \\parblock. Missing \\endparblock");
   }

   // removes blank lines from the detailed docs
   current->setData(EntryKey::Main_Docs, trimEmptyLines(current->getData(EntryKey::Main_Docs), current->docLine));

   if (current->section == Entry::FILEDOC_SEC && current->getData(EntryKey::Main_Docs).isEmpty()) {
      // to allow a comment block with just a @file command
      current->setData(EntryKey::Main_Docs, "\n\n");
   }

   if (current->section == Entry::MEMBERGRP_SEC && s_memberGroupId == DOX_NOGROUP) {
      // @name section but no group started yet
      openGroup(current, yyFileName, yyLineNr, true);
   }

   checkFormula();
   r_protection = s_protection;

   groupAddDocs(curEntry);
   r_newEntryNeeded = s_needNewEntry;

   if (s_parseMore && r_position == s_inputPosition) {
      // did not proceed during this call, do not continue or there will be an infinate loop
      s_parseMore = false;
   }

   if (s_parseMore) {
      r_position = s_inputPosition;
   } else {
      r_position = 0;
   }

   lineNr = yyLineNr;

   return s_parseMore;
}

void groupEnterFile(const QString &fileName, int)
{
   s_openCount = 0;
   s_autoGroupStack.clear();
   s_memberGroupId = DOX_NOGROUP;
   s_memberGroupDocs.clear();
   s_memberGroupRelates.clear();
   s_compoundName = fileName;
}

void groupLeaveFile(const QString &fileName, int line)
{
   s_memberGroupId = DOX_NOGROUP;
   s_memberGroupRelates.clear();
   s_memberGroupDocs.clear();

   if (! s_autoGroupStack.isEmpty()) {
      warn(fileName, line, "End of file while inside a group\n");

   } else if (s_openCount > 0)  {
      warn(fileName, line, "End of file with unbalanced group command\n");
   }
}

void groupEnterCompound(const QString &fileName, int line, const QString &name)
{
   if (s_memberGroupId != DOX_NOGROUP) {
      warn(fileName, line, "Try to put compound %s inside a member group\n", csPrintable(name));
   }

   s_memberGroupId = DOX_NOGROUP;
   s_memberGroupRelates.clear();
   s_memberGroupDocs.clear();
   s_compoundName = name;

   int i = s_compoundName.indexOf('(');

   if (i != -1) {
      // strip category (Obj-C)
      s_compoundName=s_compoundName.left(i);
   }

   if (s_compoundName.isEmpty()) {
      s_compoundName=fileName;
   }
}

void groupLeaveCompound(const QString &, int, const QString &)
{
   s_memberGroupId = DOX_NOGROUP;
   s_memberGroupRelates.resize(0);
   s_memberGroupDocs.resize(0);
   s_compoundName.resize(0);
}

static int findExistingGroup(int &groupId, const QSharedPointer<MemberGroupInfo> info)
{
   for (auto di = Doxy_Globals::memGrpInfoDict.begin(); di != Doxy_Globals::memGrpInfoDict.end(); ++di) {

      auto mi = *di;

      if (s_compoundName == mi->compoundName && ! mi->header.isEmpty() &&
               mi->header.compare(info->header, Qt::CaseInsensitive) == 0) {

         // same file or scope, not a nameless group, same header name
         return (int)di.key();    // put the item in this group
      }
   }

   groupId++; // start new group
   return groupId;
}

void openGroup(QSharedPointer<Entry> e, const QString &, int, bool forceOpen)
{
   if (! forceOpen) {
      ++s_openCount;
   }

   if (e->section == Entry::GROUPDOC_SEC) {
      // auto group
      s_autoGroupStack.push( QMakeShared<Grouping>(e->m_entryName, e->groupingPri()) );

   } else {
      // start of a member group

      if (s_memberGroupId == DOX_NOGROUP) {
         // no group started yet
         static int curGroupId = 0;

         QSharedPointer<MemberGroupInfo> info = QMakeShared<MemberGroupInfo>();

         info->header = s_memberGroupHeader.trimmed();
         info->compoundName = s_compoundName;
         s_memberGroupId = findExistingGroup(curGroupId, info);

         Doxy_Globals::memGrpInfoDict.insert(s_memberGroupId, info);

         s_memberGroupRelates = e->getData(EntryKey::Related_Class);
         e->mGrpId = s_memberGroupId;
      }
   }
}

void closeGroup(QSharedPointer<Entry> e, const QString &fileName, int line, bool isInline, bool forceClose)
{
   if (! forceClose) {

      if (s_openCount < 1) {
         warn(fileName, line, "Unbalanced Group Command");
      } else {
         --s_openCount;
      }
   }

   if (s_memberGroupId != DOX_NOGROUP) {
      // end of member group

      QSharedPointer<MemberGroupInfo> info = Doxy_Globals::memGrpInfoDict.value(s_memberGroupId);

      if (info) {
         // known group
         info->doc     = s_memberGroupDocs;
         info->docFile = fileName;
         info->docLine = line;
      }

      s_memberGroupId = DOX_NOGROUP;
      s_memberGroupRelates.resize(0);
      s_memberGroupDocs.resize(0);

      if (! isInline) {
         e->mGrpId = DOX_NOGROUP;
      }

   } else if (! s_autoGroupStack.isEmpty()) {
      // end of auto group
      QSharedPointer<Grouping> grp = s_autoGroupStack.pop();

      if (! isInline && ! e->m_groups.empty()) {
         e->m_groups.removeLast();
      }

      if (! isInline) {
         initGroupInfo(e);
      }
   }
}

void initGroupInfo(QSharedPointer<Entry> e)
{
   e->mGrpId  = s_memberGroupId;
   e->setData(EntryKey::Related_Class, s_memberGroupRelates);

   if (! s_autoGroupStack.isEmpty()) {
      e->m_groups.append(*s_autoGroupStack.top());
   }
}

static void groupAddDocs(QSharedPointer<Entry> e)
{
   if (e->section == Entry::MEMBERGRP_SEC) {
      s_memberGroupDocs = e->getData(EntryKey::Brief_Docs).trimmed();

      e->setData(EntryKey::Main_Docs, trimEmptyLines(e->getData(EntryKey::Main_Docs), e->docLine));

      if (! s_memberGroupDocs.isEmpty() && ! e->getData(EntryKey::Main_Docs).isEmpty()) {
         s_memberGroupDocs+="\n\n";
      }

      s_memberGroupDocs += e->getData(EntryKey::Main_Docs);
      QSharedPointer<MemberGroupInfo> info = Doxy_Globals::memGrpInfoDict.value(s_memberGroupId);

      if (info) {
         info->doc      = s_memberGroupDocs;
         info->docFile  = e->getData(EntryKey::MainDocs_File);
         info->docLine  = e->docLine;
         info->setRefItems(e->m_specialLists);
      }

      e->setData(EntryKey::Brief_Docs, "");
      e->setData(EntryKey::Main_Docs,  "");
   }
}

static void handleGuard(const QString &expr)
{
   CondParser prs;
   bool sectionEnabled = prs.parse(yyFileName, yyLineNr, expr.trimmed());
   bool parentEnabled  = true;

   if (! s_guards.isEmpty()) {
      parentEnabled = s_guards.top().isEnabled();
   }

   if (parentEnabled) {
      if ( (sectionEnabled && s_guardType == Guard_If) || (! sectionEnabled && s_guardType == Guard_IfNot)) {
         // section is visible
         s_guards.push(GuardedSection(true, true));
         s_isEnabledSection = true;
         BEGIN( GuardParamEnd );

      } else {
         // section is invisible
         if (s_guardType != Guard_Skip) {
            s_guards.push(GuardedSection(false, true));
         }

         BEGIN( SkipGuardedSection );
      }

   } else {
      // invisible because of parent
      s_guards.push(GuardedSection(false, false));
      BEGIN( SkipGuardedSection );
   }
}

